1 tx
23 calls
constructor
constructor(address _usrTokenAddress, address[] _allowedWithdrawalTokenAddresses, address _treasury, address _chainlinkOracle, address _usrPriceStorage, uint256 _usrPriceStorageHeartbeatInterval, uint256 _redemptionLimit, uint256 _lastResetTime)
functions
allowedWithdrawalTokens
viewfunction allowedWithdrawalTokens(address token) view returns (bool isAllowed)
chainlinkOracle
viewfunction chainlinkOracle() view returns (address)
currentRedemptionUsage
viewfunction currentRedemptionUsage() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
getRedeemPrice
viewfunction getRedeemPrice(address _withdrawalTokenAddress) view returns (uint80 roundId, int256 price, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastResetTime
viewfunction lastResetTime() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
redeemCounter
viewfunction redeemCounter() view returns (uint256)
redemptionLimit
viewfunction redemptionLimit() view returns (uint256)
SERVICE_ROLE
viewfunction SERVICE_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
treasury
viewfunction treasury() view returns (address)
USR_TOKEN_ADDRESS
viewfunction USR_TOKEN_ADDRESS() view returns (address)
usrPriceStorage
viewfunction usrPriceStorage() view returns (address)
usrPriceStorageHeartbeatInterval
viewfunction usrPriceStorageHeartbeatInterval() view returns (uint256)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
addAllowedWithdrawalToken
nonpayablefunction addAllowedWithdrawalToken(address _allowedWithdrawalTokenAddress)
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(uint256 _amount, address _receiver, address _withdrawalTokenAddress) returns (uint256 withdrawalTokenAmount)
redeem
nonpayablefunction redeem(uint256 _amount, address _withdrawalTokenAddress)
removeAllowedWithdrawalToken
nonpayablefunction removeAllowedWithdrawalToken(address _allowedWithdrawalTokenAddress)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setChainlinkOracle
nonpayablefunction setChainlinkOracle(address _chainlinkOracle)
setRedemptionLimit
nonpayablefunction setRedemptionLimit(uint256 _redemptionLimit)
setTreasury
nonpayablefunction setTreasury(address _treasury)
setUsrPriceStorage
nonpayablefunction setUsrPriceStorage(address _usrPriceStorage)
setUsrPriceStorageHeartbeatInterval
nonpayablefunction setUsrPriceStorageHeartbeatInterval(uint256 _usrPriceStorageHeartbeatInterval)
unpause
nonpayablefunction unpause()
events
AllowedWithdrawalTokenAdded
event AllowedWithdrawalTokenAdded(address _tokenAddress)
AllowedWithdrawalTokenRemoved
event AllowedWithdrawalTokenRemoved(address _tokenAddres)
ChainlinkOracleSet
event ChainlinkOracleSet(address _chainlinkOracleAddress)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
Paused
event Paused(address account)
Redeemed
event Redeemed(address indexed _sender, address indexed _receiver, uint256 _amount, address _withdrawalToken, uint256 _withdrawalTokenAmount)
RedemptionLimitReset
event RedemptionLimitReset(uint256 _newResetTime)
RedemptionLimitSet
event RedemptionLimitSet(uint256 _redemptionLimit)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TreasurySet
event TreasurySet(address _treasuryAddress)
Unpaused
event Unpaused(address account)
UsrPriceStorageHeartbeatIntervalSet
event UsrPriceStorageHeartbeatIntervalSet(uint256 _interval)
UsrPriceStorageSet
event UsrPriceStorageSet(address _usrPriceStorageAddress)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
IdempotencyKeyAlreadyExist
error IdempotencyKeyAlreadyExist(bytes32 _idempotencyKey)
InvalidAmount
error InvalidAmount(uint256 _amount)
InvalidLastResetTime
error InvalidLastResetTime(uint256 _lastResetTime)
InvalidTokenAddress
error InvalidTokenAddress(address _token)
InvalidUsrPrice
error InvalidUsrPrice(uint256 _price)
RedemptionLimitExceeded
error RedemptionLimitExceeded(uint256 _amount, uint256 _limit)
SafeCastOverflowedIntToUint
error SafeCastOverflowedIntToUint(int256 value)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TokenAlreadyAllowed
error TokenAlreadyAllowed(address _token)
TokenNotAllowed
error TokenNotAllowed(address _token)
UsrPriceHeartbeatIntervalCheckFailed
error UsrPriceHeartbeatIntervalCheckFailed()
ZeroAddress
error ZeroAddress()
creation bytecode
0x60c060405234801561001057600080fd5b5060405161377b38038061377b83398101604081905261002f91610677565b62015180338061005a57604051636116401160e11b8152600060048201526024015b60405180910390fd5b600180546001600160d01b0316600160d01b65ffffffffffff8516021790556100846000826101c7565b50506003805460ff191690555061009a88610238565b6001600160a01b03881660a08190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156100e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010891906107aa565b60ff1660805261011786610262565b610120856102d4565b61012984610336565b61013283610398565b61013b826103e1565b60005b87518110156101775761016f88828151811061015c5761015c6107d4565b602002602001015161042a60201b60201c565b60010161013e565b50600060085542811080610196575061019342620151806107ea565b81115b156101b75760405163a647c7ed60e01b815260048101829052602401610051565b6009555061080b95505050505050565b6000826102255760006101e26002546001600160a01b031690565b6001600160a01b03161461020957604051631fe1e13d60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0384161790555b61022f838361050d565b90505b92915050565b6001600160a01b03811661025f5760405163d92e233d60e01b815260040160405180910390fd5b50565b600061026d816105b7565b61027682610238565b60038054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020015b60405180910390a15050565b60006102df816105b7565b6102e882610238565b600480546001600160a01b0319166001600160a01b0384169081179091556040519081527f081c1e2f25fbdd3d959fdf598b66a64b835caf8e4e3e72a981c8523958ae1b7a906020016102c8565b6000610341816105b7565b61034a82610238565b600580546001600160a01b0319166001600160a01b0384169081179091556040519081527f74d65ee632990c763e1c43e0d9fecf6ed139168015a4e3c8dcb722cc4a16631b906020016102c8565b60006103a3816105b7565b6103ac826105c1565b60068290556040518281527f57a7ef62434503519e25a7ca3b754c11071d34ede74461180a6ff942f31de77d906020016102c8565b60006103ec816105b7565b6103f5826105c1565b60078290556040518281527f480f1e87fd6d66be9de142d3908aa0bc11ef4a946938f3409fc650e813c26b38906020016102c8565b6000610435816105b7565b61043e82610238565b6001600160a01b0382166000908152600b602052604090205460ff1615610483576040516309ba754d60e41b81526001600160a01b0383166004820152602401610051565b816001600160a01b03163b6000036104b957604051637330680360e01b81526001600160a01b0383166004820152602401610051565b6001600160a01b0382166000818152600b6020908152604091829020805460ff1916600117905590519182527f9350c49881dc8071883958e18d77ef9d33c4ad1af952765b71ba31b41de998b991016102c8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166105af576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610232565b506000610232565b61025f81336105e5565b8060000361025f57604051633728b83d60e01b815260048101829052602401610051565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166106385760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610051565b5050565b6001600160a01b038116811461025f57600080fd5b805161065c8161063c565b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600080610100898b03121561069457600080fd5b885161069f8161063c565b60208a01519098506001600160401b038111156106bb57600080fd5b8901601f81018b136106cc57600080fd5b80516001600160401b038111156106e5576106e5610661565b604051600582901b90603f8201601f191681016001600160401b038111828210171561071357610713610661565b60405291825260208184018101929081018e84111561073157600080fd5b6020850194505b838510156107575761074985610651565b815260209485019401610738565b50995061076a9250505060408a01610651565b955061077860608a01610651565b945061078660808a01610651565b60a08a015160c08b015160e0909b0151999c989b5096999598909790945092505050565b6000602082840312156107bc57600080fd5b815160ff811681146107cd57600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b8082018082111561023257634e487b7160e01b600052601160045260246000fd5b60805160a051612f0c61086f600039600081816103a601526112a6015260008181610c0001528181610c3101528181610c8501528181610cba0152818161139d015281816113cb0152818161140401528181611458015261148d0152612f0c6000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80638456cb5911610186578063ba087652116100e3578063d547741f11610097578063ef06e72c11610071578063ef06e72c146106b0578063f0f44260146106d0578063ffb29023146106e357600080fd5b8063d547741f14610675578063d602b9fd14610688578063de426fc91461069057600080fd5b8063cc8463c8116100c8578063cc8463c814610619578063cefc142914610621578063cf6eefb71461062957600080fd5b8063ba087652146105fd578063c7a580451461061057600080fd5b8063a20e7d471161013a578063a217fddf1161011f578063a217fddf146105d9578063a7ce4565146105e1578063b3d0de6d146105ea57600080fd5b8063a20e7d47146105a9578063a2177124146105d057600080fd5b80638da5cb5b1161016b5780638da5cb5b1461053657806391d148541461053e578063a1eda53c1461058257600080fd5b80638456cb591461051057806384ef8ffc1461051857600080fd5b806336568abe1161023f57806361d027b3116101f35780637a9b0412116101cd5780637a9b0412146104d75780637abd8e99146104ea5780637bde82f2146104fd57600080fd5b806361d027b31461048c578063634e93da146104b1578063649a5ec7146104c457600080fd5b80633f4ba83a116102245780633f4ba83a146104705780635a941ea2146104785780635c975abb1461048157600080fd5b806336568abe14610413578063368d9f061461042657600080fd5b8063248a9ca3116102965780632874d1ff1161027b5780632874d1ff146103a15780632f2ff15d146103ed578063355515d31461040057600080fd5b8063248a9ca31461035b578063264b4a411461037e57600080fd5b80630aa6220b116102c75780630aa6220b146103275780630fa4f504146103315780631710bebc1461034857600080fd5b806301ffc9a7146102e3578063022d63fb1461030b575b600080fd5b6102f66102f1366004612a29565b6106f6565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff9091168152602001610302565b61032f610752565b005b61033a60085481565b604051908152602001610302565b61032f610356366004612a8d565b610768565b61033a610369366004612aaa565b60009081526020819052604090206001015490565b6102f661038c366004612a8d565b600b6020526000908152604090205460ff1681565b6103c87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610302565b61032f6103fb366004612ac3565b6107f7565b61032f61040e366004612a8d565b61083c565b61032f610421366004612ac3565b6109b5565b610439610434366004612a8d565b610aba565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610302565b61032f610dbb565b61033a60075481565b60035460ff166102f6565b6003546103c890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61032f6104bf366004612a8d565b610dce565b61032f6104d2366004612af3565b610de2565b61032f6104e5366004612a8d565b610df6565b61032f6104f8366004612aaa565b610e7d565b61032f61050b366004612ac3565b610ec6565b61032f610ed6565b60025473ffffffffffffffffffffffffffffffffffffffff166103c8565b6103c8610ee9565b6102f661054c366004612ac3565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61058a610f0f565b6040805165ffffffffffff938416815292909116602083015201610302565b61033a7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b81565b61033a60095481565b61033a600081565b61033a600a5481565b61032f6105f8366004612a8d565b610f8b565b61033a61060b366004612b1b565b61109b565b61033a60065481565b610310611777565b61032f611815565b6001546040805173ffffffffffffffffffffffffffffffffffffffff831681527401000000000000000000000000000000000000000090920465ffffffffffff16602083015201610302565b61032f610683366004612ac3565b611871565b61032f6118b2565b6005546103c89073ffffffffffffffffffffffffffffffffffffffff1681565b6004546103c89073ffffffffffffffffffffffffffffffffffffffff1681565b61032f6106de366004612a8d565b6118c5565b61032f6106f1366004612aaa565b611953565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3149878600000000000000000000000000000000000000000000000000000000148061074c575061074c8261199c565b92915050565b600061075d81611a33565b610765611a3d565b50565b600061077381611a33565b61077c82611a4a565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f74d65ee632990c763e1c43e0d9fecf6ed139168015a4e3c8dcb722cc4a16631b906020015b60405180910390a15050565b8161082e576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108388282611a97565b5050565b600061084781611a33565b61085082611a4a565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b602052604090205460ff16156108cd576040517f9ba754d000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163b600003610936576040517f7330680300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108c4565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f9350c49881dc8071883958e18d77ef9d33c4ad1af952765b71ba31b41de998b991016107eb565b811580156109dd575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b15610ab05760015473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900465ffffffffffff1681151580610a31575065ffffffffffff8116155b80610a4457504265ffffffffffff821610155b15610a85576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff821660048201526024016108c4565b5050600180547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff1690555b6108388282611ac2565b600480546040517f725e6f0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481169382019390935260009283928392839283921690819063725e6f0a9060240160a060405180830381865afa158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190612b7c565b6040517fcefe0f2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d81166004830152959b509399509197509550935060009183169063cefe0f2190602401602060405180830381865afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc9190612bce565b90507f00000000000000000000000000000000000000000000000000000000000000008160ff161115610c8357610c7c610c597f000000000000000000000000000000000000000000000000000000000000000060ff8416612c20565b610c6490600a612d56565b610c6d88611b1b565b610c779190612d62565b611b5e565b9550610cff565b7f00000000000000000000000000000000000000000000000000000000000000008160ff161015610cff57610cfc610cde60ff83167f0000000000000000000000000000000000000000000000000000000000000000612c20565b610ce990600a612d56565b610cf288611b1b565b610c779190612d9d565b95505b610dae610d0a611bbd565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362064ca06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b9190612db4565b610da489611b1b565b610c6d9190612d9d565b9550505091939590929450565b6000610dc681611a33565b610765611d73565b6000610dd981611a33565b61083882611df0565b6000610ded81611a33565b61083882611e70565b6000610e0181611a33565b610e0a82611a4a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f081c1e2f25fbdd3d959fdf598b66a64b835caf8e4e3e72a981c8523958ae1b7a906020016107eb565b6000610e8881611a33565b610e9182611ed9565b60068290556040518281527f57a7ef62434503519e25a7ca3b754c11071d34ede74461180a6ff942f31de77d906020016107eb565b610ed182338361109b565b505050565b6000610ee181611a33565b610765611f16565b6000610f0a60025473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6002546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015158015610f5257504265ffffffffffff821610155b610f5e57600080610f83565b60025474010000000000000000000000000000000000000000900465ffffffffffff16815b915091509091565b6000610f9681611a33565b81610fa081611a4a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604090205460ff16611017576040517f94403b7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016108c4565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527fc4e81f4b6a3bd412641a64914cb5246e43ab7650bf1c0be5ac06b7e3691a8311910160405180910390a1505050565b60006110a5611f71565b816110af81611a4a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604090205460ff16611126576040517f94403b7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016108c4565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61115081611a33565b61115986611ed9565b61116285611a4a565b60095442906111749062015180612dcd565b81106111fa576000620151806009548361118e9190612c20565b6111989190612d62565b90506111a78162015180612d9d565b600960008282546111b89190612dcd565b909155505060006008556009546040519081527fcd895bee1535dd5c93483e791086e9a008d698b12b87015a9338fc88388cbd4e9060200160405180910390a1505b866008600082825461120c9190612dcd565b9091555050600754600854111561125d576007546040517f14d686570000000000000000000000000000000000000000000000000000000081526108c4918991600401918252602082015260400190565b6000611267611fae565b6040517f346a907400000000000000000000000000000000000000000000000000000000815260048101829052336024820152604481018a90529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063346a907490606401600060405180830381600087803b1580156112ff57600080fd5b505af1158015611313573d6000803e3d6000fd5b5050505060008673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113889190612bce565b9050600061139588610aba565b5050509150507f00000000000000000000000000000000000000000000000000000000000000008260ff16111561144f576113f37f000000000000000000000000000000000000000000000000000000000000000060ff8416612c20565b6113fe90600a612d56565b8161142a7f0000000000000000000000000000000000000000000000000000000000000000600a612d56565b611434908d612d9d565b61143e9190612d62565b6114489190612d9d565b96506114d4565b61147c60ff83167f0000000000000000000000000000000000000000000000000000000000000000612c20565b61148790600a612d56565b816114b37f0000000000000000000000000000000000000000000000000000000000000000600a612d56565b6114bd908d612d9d565b6114c79190612d62565b6114d19190612d62565b96505b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff908116600483015289916000918316906370a0823190602401602060405180830381865afa15801561154e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190612db4565b90508881101561163e57600354610100900473ffffffffffffffffffffffffffffffffffffffff16635eb16716868c6115ab858e612c20565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff9091166024830152604482015260026064820152608401600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b505050505b6003546040517fe31d54f60000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff8481166024830152306044830152606482018c90526101009092049091169063e31d54f690608401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060035461170b925073ffffffffffffffffffffffffffffffffffffffff8581169250610100909104168d8c61203e565b604080518d815273ffffffffffffffffffffffffffffffffffffffff8c811660208301529181018b9052908c169033907fa0dde38365e7863fcda1e12536206bc5ab0b7074a66a441e866145cf3d07fc249060600160405180910390a350505050505050509392505050565b6002546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff1680151580156117b957504265ffffffffffff8216105b6117eb576001547a010000000000000000000000000000000000000000000000000000900465ffffffffffff1661180f565b60025474010000000000000000000000000000000000000000900465ffffffffffff165b91505090565b60015473ffffffffffffffffffffffffffffffffffffffff16338114611869576040517fc22c80220000000000000000000000000000000000000000000000000000000081523360048201526024016108c4565b6107656120d3565b816118a8576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083882826121c6565b60006118bd81611a33565b6107656121eb565b60006118d081611a33565b6118d982611a4a565b600380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016107eb565b600061195e81611a33565b61196782611ed9565b60078290556040518281527f480f1e87fd6d66be9de142d3908aa0bc11ef4a946938f3409fc650e813c26b38906020016107eb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461074c565b61076581336121f6565b611a4860008061227c565b565b73ffffffffffffffffffffffffffffffffffffffff8116610765576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260208190526040902060010154611ab281611a33565b611abc83836123d6565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314611b11576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ed1828261249d565b600080821215611b5a576040517fa8ce4432000000000000000000000000000000000000000000000000000000008152600481018390526024016108c4565b5090565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611b5a576040517f24775e06000000000000000000000000000000000000000000000000000000008152600481018390526024016108c4565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663053f14da6040518163ffffffff1660e01b8152600401608060405180830381865afa158015611c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c539190612de0565b9350505091504260065482611c689190612dcd565b1015611ca0576040517fb319f5e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362064ca06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d319190612db4565b821015611d6d576040517f5bfd50e2000000000000000000000000000000000000000000000000000000008152600481018390526024016108c4565b50919050565b611d7b6124ff565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000611dfa611777565b611e034261253b565b611e0d9190612e16565b9050611e198282612587565b60405165ffffffffffff8216815273ffffffffffffffffffffffffffffffffffffffff8316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b6000611e7b82612623565b611e844261253b565b611e8e9190612e16565b9050611e9a828261227c565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b91016107eb565b80600003610765576040517f3728b83d000000000000000000000000000000000000000000000000000000008152600481018290526024016108c4565b611f1e611f71565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dc63390565b60035460ff1615611a48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060400160405280601681526020017f557372526564656d7074696f6e457874656e73696f6e00000000000000000000815250600a54604051602001611ffa929190612e58565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120600a80546001019055919050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611abc90859061266b565b60015473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900465ffffffffffff1680158061212357504265ffffffffffff821610155b15612164576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff821660048201526024016108c4565b61218d600061218860025473ffffffffffffffffffffffffffffffffffffffff1690565b61249d565b506121996000836123d6565b5050600180547fffffffffffff000000000000000000000000000000000000000000000000000016905550565b6000828152602081905260409020600101546121e181611a33565b611abc838361249d565b611a48600080612587565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610838576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016108c4565b6002547a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015612351574265ffffffffffff82161015612327576002546001805479ffffffffffffffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090920465ffffffffffff167a01000000000000000000000000000000000000000000000000000002919091179055612351565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b506002805473ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000065ffffffffffff9485160279ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a0100000000000000000000000000000000000000000000000000009290931691909102919091179055565b60008261248c5760006123fe60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461244b576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b6124968383612701565b9392505050565b6000821580156124c7575060025473ffffffffffffffffffffffffffffffffffffffff8381169116145b156124f557600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b61249683836127fd565b60035460ff16611a48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600065ffffffffffff821115611b5a576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260306004820152602481018390526044016108c4565b600180547401000000000000000000000000000000000000000065ffffffffffff84811682027fffffffffffff0000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff881617179093559004168015610ed1576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a1505050565b60008061262e611777565b90508065ffffffffffff168365ffffffffffff1611612656576126518382612e7a565b612496565b61249665ffffffffffff8416620697806128b8565b600061268d73ffffffffffffffffffffffffffffffffffffffff8416836128ce565b905080516000141580156126b25750808060200190518101906126b09190612e98565b155b15610ed1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016108c4565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166127f55760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556127933390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161074c565b50600061074c565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156127f55760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161074c565b60008183106128c75781612496565b5090919050565b606061249683836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516129019190612eba565b60006040518083038185875af1925050503d806000811461293e576040519150601f19603f3d011682016040523d82523d6000602084013e612943565b606091505b509150915061295386838361295d565b9695505050505050565b60608261296d57612651826129e7565b8151158015612991575073ffffffffffffffffffffffffffffffffffffffff84163b155b156129e0576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108c4565b5080612496565b8051156129f75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461249657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461076557600080fd5b600060208284031215612a9f57600080fd5b813561249681612a6b565b600060208284031215612abc57600080fd5b5035919050565b60008060408385031215612ad657600080fd5b823591506020830135612ae881612a6b565b809150509250929050565b600060208284031215612b0557600080fd5b813565ffffffffffff8116811461249657600080fd5b600080600060608486031215612b3057600080fd5b833592506020840135612b4281612a6b565b91506040840135612b5281612a6b565b809150509250925092565b805169ffffffffffffffffffff81168114612b7757600080fd5b919050565b600080600080600060a08688031215612b9457600080fd5b612b9d86612b5d565b60208701516040880151606089015192975090955093509150612bc260808701612b5d565b90509295509295909350565b600060208284031215612be057600080fd5b815160ff8116811461249657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074c5761074c612bf1565b6001815b6001841115612c6e57808504811115612c5257612c52612bf1565b6001841615612c6057908102905b60019390931c928002612c37565b935093915050565b600082612c855750600161074c565b81612c925750600061074c565b8160018114612ca85760028114612cb257612cce565b600191505061074c565b60ff841115612cc357612cc3612bf1565b50506001821b61074c565b5060208310610133831016604e8410600b8410161715612cf1575081810a61074c565b612d1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c33565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612d4e57612d4e612bf1565b029392505050565b60006124968383612c76565b600082612d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761074c5761074c612bf1565b600060208284031215612dc657600080fd5b5051919050565b8082018082111561074c5761074c612bf1565b60008060008060808587031215612df657600080fd5b505082516020840151604085015160609095015191969095509092509050565b65ffffffffffff818116838216019081111561074c5761074c612bf1565b60005b83811015612e4f578181015183820152602001612e37565b50506000910152565b60008351612e6a818460208801612e34565b9190910191825250602001919050565b65ffffffffffff828116828216039081111561074c5761074c612bf1565b600060208284031215612eaa57600080fd5b8151801515811461249657600080fd5b60008251612ecc818460208701612e34565b919091019291505056fea2646970667358221220d55e95b22deb482787dbf966c9ec257dd3337fb152575a5c4f6b9274ad9c802764736f6c634300081c003300000000000000000000000066a1e37c9b0eaddca17d3662d6c05f4decf3e1100000000000000000000000000000000000000000000000000000000000000100000000000000000000000000acb7027f271b03b502d65feba617a0d817d62b8e000000000000000000000000d9a411062120a3b8b2b60e8e156d7cd4fd846f810000000000000000000000007f45180d6ffd0435d8dd695fd01320e6999c261c000000000000000000000000000000000000000000000000000000000001a5e000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000000000000000676d3b710000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48