111 txs
112 calls
constructor
constructor(address _token, uint256 _requiredSignatures, uint256 _proposalTimeout, address _admin)
functions
canExecuteProposal
viewfunction canExecuteProposal(uint256 proposalId) view returns (bool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deployer
viewfunction deployer() view returns (address)
EMERGENCY_ROLE
viewfunction EMERGENCY_ROLE() view returns (bytes32)
emergencyWithdrawalCount
viewfunction emergencyWithdrawalCount() view returns (uint256)
emergencyWithdrawals
viewfunction emergencyWithdrawals(uint256) view returns (address recipient, uint256 amount, uint256 timestamp, address executor)
getActiveProposals
viewfunction getActiveProposals(uint256 page, uint256 pageSize) view returns (uint256[] proposalIds, uint256 totalCount)
getAdminMembers
viewfunction getAdminMembers() view returns (address[])
getAllActiveProposals
viewfunction getAllActiveProposals() view returns (uint256[])
getAllCancelledProposals
viewfunction getAllCancelledProposals() view returns (uint256[])
getAllEmergencyWithdrawals
viewfunction getAllEmergencyWithdrawals() view returns (uint256[])
getAllExecutedProposals
viewfunction getAllExecutedProposals() view returns (uint256[])
getCancelledProposals
viewfunction getCancelledProposals(uint256 page, uint256 pageSize) view returns (uint256[] proposalIds, uint256 totalCount)
getContractInfo
viewfunction getContractInfo() view returns (address tokenAddress, uint256 currentRequiredSignatures, uint256 currentProposalTimeout, uint256 totalProposals, bool isPaused)
getEmergencyMembers
viewfunction getEmergencyMembers() view returns (address[])
getEmergencyWithdrawal
viewfunction getEmergencyWithdrawal(uint256 withdrawalId) view returns (address recipient, uint256 amount, uint256 timestamp, address executor)
getEmergencyWithdrawalCount
viewfunction getEmergencyWithdrawalCount() view returns (uint256)
getEmergencyWithdrawals
viewfunction getEmergencyWithdrawals(uint256 page, uint256 pageSize) view returns (uint256[] withdrawals, uint256 totalCount)
getExecutedProposals
viewfunction getExecutedProposals(uint256 page, uint256 pageSize) view returns (uint256[] proposalIds, uint256 totalCount)
getMultisigMembers
viewfunction getMultisigMembers() view returns (address[])
getProposal
viewfunction getProposal(uint256 proposalId) view returns (address recipient, uint256 amount, uint256 timestamp, bool executed, bool cancelled, uint256 voteCount, address executor, address[] voters)
getProposalDetails
viewfunction getProposalDetails(uint256 proposalId) view returns (address recipient, uint256 amount, uint256 timestamp, bool executed, bool cancelled, uint256 voteCount, address executor, address[] voters, bool expired, uint256 timeRemaining)
getProposalStatus
viewfunction getProposalStatus(uint256 proposalId) view returns (bool exists, bool executed, bool cancelled, bool expired, uint256 timeRemaining)
getProposalTimeRemaining
viewfunction getProposalTimeRemaining(uint256 proposalId) view returns (uint256)
getProposalVoterCount
viewfunction getProposalVoterCount(uint256 proposalId) view returns (uint256)
getProposalVoters
viewfunction getProposalVoters(uint256 proposalId) view returns (address[])
getProposalVotersPaginated
viewfunction getProposalVotersPaginated(uint256 proposalId, uint256 page, uint256 pageSize) view returns (address[] voters, uint256 totalCount)
getPutTrade
viewfunction getPutTrade(uint256 putTradeId) view returns (address user, uint256 amount, uint256 expiredAt, bool isCallback, uint256 callbackAt, uint256 timestamp)
getPutTradeCount
viewfunction getPutTradeCount() view returns (uint256)
getPutTradeDetails
viewfunction getPutTradeDetails(uint256 putTradeId) view returns (address user, uint256 amount, uint256 expiredAt, bool isCallback, uint256 callbackAt, uint256 timestamp, bool expired, uint256 timeRemaining)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTokenBalance
viewfunction getTokenBalance() view returns (uint256)
getUserPutTrades
viewfunction getUserPutTrades(uint256 page, uint256 pageSize) view returns (uint256[] tradeIds, uint256 totalCount)
getVoteProgress
viewfunction getVoteProgress(uint256 proposalId) view returns (uint256 currentVotes, uint256 requiredVotes, uint256 remainingVotes)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hasVoted
viewfunction hasVoted(uint256 proposalId, address voter) view returns (bool)
isProposalExpired
viewfunction isProposalExpired(uint256 proposalId) view returns (bool)
isVoterInProposal
viewfunction isVoterInProposal(uint256 proposalId, address voter) view returns (bool)
MAX_PAGE_SIZE
viewfunction MAX_PAGE_SIZE() view returns (uint256)
MIN_PUT_TRADE_AMOUNT
viewfunction MIN_PUT_TRADE_AMOUNT() view returns (uint256)
MULTISIG_ROLE
viewfunction MULTISIG_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proposalCount
viewfunction proposalCount() view returns (uint256)
proposals
viewfunction proposals(uint256) view returns (address recipient, uint256 amount, uint256 timestamp, uint256 voteCount, address executor, bool executed, bool cancelled)
proposalTimeout
viewfunction proposalTimeout() view returns (uint256)
PUT_TRADE_DURATION
viewfunction PUT_TRADE_DURATION() view returns (uint256)
putTradeCount
viewfunction putTradeCount() view returns (uint256)
putTrades
viewfunction putTrades(uint256) view returns (address user, uint256 amount, uint256 expiredAt, uint256 callbackAt, uint256 timestamp, bool isCallback)
requiredSignatures
viewfunction requiredSignatures() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
token
viewfunction token() view returns (address)
userPutTrades
viewfunction userPutTrades(address, uint256) view returns (uint256)
callbackPutTrade
nonpayablefunction callbackPutTrade(uint256 putTradeId)
cancelProposal
nonpayablefunction cancelProposal(uint256 proposalId)
createProposal
nonpayablefunction createProposal(address recipient, uint256 amount)
createPutTrade
nonpayablefunction createPutTrade(uint256 amount, uint256 duration)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address recipient, uint256 amount)
executeProposal
nonpayablefunction executeProposal(uint256 proposalId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
unpause
nonpayablefunction unpause()
updateProposalTimeout
nonpayablefunction updateProposalTimeout(uint256 newTimeout)
updateRequiredSignatures
nonpayablefunction updateRequiredSignatures(uint256 newRequiredSignatures)
voteProposal
nonpayablefunction voteProposal(uint256 proposalId)
events
EmergencyWithdraw
event EmergencyWithdraw(address indexed recipient, uint256 amount, address indexed executor)
Paused
event Paused(address account)
ProposalCancelled
event ProposalCancelled(uint256 indexed proposalId)
ProposalCreated
event ProposalCreated(uint256 indexed proposalId, address indexed recipient, uint256 amount)
ProposalExecuted
event ProposalExecuted(uint256 indexed proposalId, address indexed recipient, uint256 amount, address indexed executor)
ProposalTimeoutUpdated
event ProposalTimeoutUpdated(uint256 oldValue, uint256 newValue)
ProposalVoted
event ProposalVoted(uint256 indexed proposalId, address indexed voter)
PutTradeCallback
event PutTradeCallback(uint256 indexed putTradeId, address indexed user, uint256 amount, uint256 callbackAt)
PutTradeCreated
event PutTradeCreated(uint256 indexed putTradeId, address indexed user, uint256 amount, uint256 expiredAt)
RequiredSignaturesUpdated
event RequiredSignaturesUpdated(uint256 oldValue, uint256 newValue)
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)
Unpaused
event Unpaused(address account)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AlreadyVoted
error AlreadyVoted()
CannotRevokeDeployerRole
error CannotRevokeDeployerRole()
EmergencyWithdrawalNotFound
error EmergencyWithdrawalNotFound()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InsufficientBalance
error InsufficientBalance()
InsufficientPutTradeAmount
error InsufficientPutTradeAmount()
InsufficientVotes
error InsufficientVotes()
InvalidAmount
error InvalidAmount()
InvalidExpiredAt
error InvalidExpiredAt()
InvalidPageNumber
error InvalidPageNumber()
InvalidPageSize
error InvalidPageSize()
InvalidRecipient
error InvalidRecipient()
InvalidRequiredSignatures
error InvalidRequiredSignatures()
InvalidTimeout
error InvalidTimeout()
NotEmergencyRole
error NotEmergencyRole()
NotMultisigMember
error NotMultisigMember()
NotPutTradeOwner
error NotPutTradeOwner()
OnlyDeployerCanGrantRole
error OnlyDeployerCanGrantRole()
ProposalAlreadyCancelled
error ProposalAlreadyCancelled()
ProposalAlreadyExecuted
error ProposalAlreadyExecuted()
ProposalExpired
error ProposalExpired()
ProposalNotFound
error ProposalNotFound()
PutTradeAlreadyCallback
error PutTradeAlreadyCallback()
PutTradeExpired
error PutTradeExpired()
PutTradeNotExpired
error PutTradeNotExpired()
PutTradeNotFound
error PutTradeNotFound()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60c034620003c957601f620037d938819003918201601f1916830191906001600160401b03831184841017620003ce578160809285926040958652833981010312620003c9576200005082620003e4565b91602080820151936200006a6060858501519401620003e4565b9160019384805560018060a01b038093168015620003b8578715620003a7578115620003965760805260049687556005558260a052818316918233036200038657620000b684620003f9565b50600093848052600d91828452878620858752845260ff888720541615620002fc575b8060a051163303620002ec57620000f08262000479565b50600080516020620037b9833981519152808752838552888720868852855260ff89882054161562000262575b5060a051163303620002525762000134906200050a565b5060008051602062003799833981519152808552818352868520848652835260ff878620541615620001c1575b86516131e290816200059782396080518181816103370152818161061d01528181610a2c01528181610cbb01528181610faf01528181611299015281816114ef0152611d49015260a0518181816107c601528181611a9301526123200152f35b808552600c8352868520805490680100000000000000008210156200023f578782018082558210156200022c5786528386200180546001600160a01b031916851790558452815284832091835252829020805460ff1916909117905590508038808080808062000161565b634e487b7160e01b875260328a52602487fd5b634e487b7160e01b875260418a52602487fd5b865163f5201fe560e01b81528890fd5b808752600c855288872080549068010000000000000000821015620002d957898201808255821015620002c65788528588200180546001600160a01b0319168717905586528284528786208587528452878620805460ff191688179055386200011d565b634e487b7160e01b895260328c52602489fd5b634e487b7160e01b895260418c52602489fd5b875163f5201fe560e01b81528990fd5b858052600c8452878620805490680100000000000000008210156200037357888201808255821015620003605787528487200180546001600160a01b031916861790558580528284528786208587528452878620805460ff191688179055620000d9565b634e487b7160e01b885260328b52602488fd5b634e487b7160e01b885260418b52602488fd5b855163f5201fe560e01b81528790fd5b8651631ffb86f160e21b8152600490fd5b865163458bb42160e01b8152600490fd5b8651634e46966960e11b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620003c957565b6001600160a01b031660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205490919060ff166200047557818052816020526040822081835260205260408220600160ff198254161790553391600080516020620037798339815191528180a4600190565b5090565b6001600160a01b031660008181527f185d16225b5063ad041216623782c485302e1c2aaa23e3c1ec873869c3e269d36020526040812054909190600080516020620037b98339815191529060ff166200050557808352826020526040832082845260205260408320600160ff1982541617905560008051602062003779833981519152339380a4600190565b505090565b6001600160a01b031660008181527f3c1b1854ab1360abbb06c8d4c6b2672d4b8cedc5eff522ab19e51d5cb8fdbd466020526040812054909190600080516020620037998339815191529060ff166200050557808352826020526040832082845260205260408320600160ff1982541617905560008051602062003779833981519152339380a460019056fe608060408181526004918236101561001657600080fd5b600090813560e01c908163013cf08b14611f055750806301ffc9a714611eaf57806309ae138314611e965780630a704b6914611e7a5780630c24af8014611e615780630d60432e14611df85780630d61b51914611c7e57806310b3914e14611c625780631de9a4be14611c4957806320df435914611c0e578063248a9ca314611be457806327d78bd414611bcb5780632bb7784614611ba35780632e13cb2414611b2d5780632f2ff15d14611a5357806331fcc467146103f657806332ff3dc414611a0b57806336568abe146119c557806336b6643a146119a65780633b4d01a71461186c5780633bc100e01461047c5780633f4ba83a14611802578063401853b71461171957806343859632146116cf57806348f4da20146116b35780634ff2f814146116945780635c975abb146116705780635d759f48146115ed5780636612f465146115c05780636a7cc6d414611580578063719487ff146115275780637cc1f867146114be578063807896d514611344578063824ea8ed1461131c57806382b2e2571461126a5780638456cb591461120f578063861e8c3b146111f15780638afef539146111585780638d0680431461113a57806391d14854146110f457806395ccea6714610f27578063a15eee2014610ee2578063a217fddf14610ec7578063a667430614610e5b578063a68f34f714610e0c578063a8f471d314610da5578063aa12a2e814610d31578063aa63839914610c0f578063aa9fbc79146109ef578063afbb9c8114610938578063b01f15f0146108cd578063c7f758a814610834578063d547741f146107f5578063d5f39488146107b1578063da35c66414610792578063dfc51a2514610591578063e0a8f6f5146104c4578063e328400c1461049b578063e65bc3d31461047c578063eac2a0a11461045e578063f0f7636414610415578063f94292c2146103f6578063f987db5b146103a0578063f990b6a11461036a578063fc0c546a146103225763ff8fb17f146102fa57600080fd5b3461031f57602036600319011261031f575061031860209235612de9565b9051908152f35b80fd5b509034610366578160031936011261036657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b50903461036657816003193601126103665761039c90610388612cdf565b509051918291602083526020830190611f9c565b0390f35b5090346103665780600319360112610366576103ba612023565b6001600160a01b03168252600b6020528082208054602435939084101561031f57506020926103e891612039565b91905490519160031b1c8152f35b5090346103665781600319360112610366576020906009549051908152f35b50903461036657816003193601126103665761044b818360008051602061318d83398151915261039c9552600c60205220612570565b9051918291602083526020830190611fd0565b50903461036657816003193601126103665761039c90610388612bcd565b5090346103665781600319360112610366576020906007549051908152f35b5090346103665781600319360112610366576020905160008051602061318d8339815191528152f35b50913461058d57602036600319011261058d578035916104e2612067565b6104ea61247b565b6104f2612499565b828452600660205280842080546001600160a01b03161561057f5782019182549160ff8360a01c166105725760ff8360a81c1661056557505060ff60a81b1916600160a81b1790557f416e669c63d9a3a5e36ee7cc7e2104b8db28ccd286aa18966e98fa230c73b08c8280a26001805580f35b5163029684ff60e61b8152fd5b516351618d5360e01b8152fd5b505163635e873760e01b8152fd5b8280fd5b50913461058d578160031936011261058d576105ab612023565b9060243560008051602061318d8339815191528552602090858252848620338752825260ff858720541615610782576105e261247b565b6105ea612499565b6001600160a01b0393841693841561077257811561076257826024918751928380926370a0823160e01b825230898301527f0000000000000000000000000000000000000000000000000000000000000000165afa80156107585782918891610723575b50106107135760019460068660035401948560035585895281855282892090876001600160601b0360a01b8354161782558489830155426002830155810180548a600384015569ffffffffffffffffffff60b01b1690558883516106b1816123e0565b52018054888255806106ee575b508752519081527f3417b456fad6209c73445d5efd446d686e75e4560f0f50c13b5a5cde976447b49190a3805580f35b81895287858a20918201915b8281106107085750506106be565b8a81550188906106fa565b8451631e9acf1760e31b81528390fd5b809250848092503d8311610751575b61073c81836123fc565b8101031261074d578190513861064e565b8680fd5b503d610732565b86513d89823e3d90fd5b855163162908e360e11b81528490fd5b8551634e46966960e11b81528490fd5b8451630a12f25960e21b81528390fd5b5090346103665781600319360112610366576020906003549051908152f35b509034610366578160031936011261036657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5091903461058d578060031936011261058d57610830913561082b600161081a61200d565b9383875286602052862001546120bf565b6121bd565b5080f35b5082903461031f57602036600319011261031f578261039c91833581526006602052209260018060a01b03808554169360018601549560028101549181015491610885600660038401549301612570565b9480519889988952602089015287015260ff8260a01c161515606087015260ff8260a81c161515608087015260a08601521660c08401526101008060e0850152830190611fd0565b5091903461058d57602036600319011261058d578060c09383358152600a6020522060018060a01b038154169260018201549260028301549060ff600560038601549486015495015416948151968752602087015285015260608401526080830152151560a0820152f35b50913461058d57602036600319011261058d5780358352600a6020528183209260018060a01b038454169283156109e05784600161010096015493600282015460ff6005840154169160038401549301549381421195968615806109d8575b6109c6575b8151988952602089015287015215156060860152608085015260a084015260c083015260e0820152f35b96506109d242836123bd565b9661099c565b508315610997565b5163dbe2f06160e01b81529050fd5b509034610366576109ff36611f81565b9091610a0961247b565b610a11612499565b600a8310610c015780516370a0823160e01b815233868201527f00000000000000000000000000000000000000000000000000000000000000009260209182816024816001600160a01b0389165afa908115610bf7579086918891610bc6575b5010610bb657603c8106610ba6576001600954019384600955848752600a8352610ab684882092336001600160601b0360a01b855416178455876001850155426125c8565b91600281019283556005810160ff1981541690558760038201558842910155338752600b8352838720805490600160401b821015610b935790610afe91600182018155612039565b81549060031b9087821b91600019901b19161790558351906323b872dd60e01b848301523360248301523060448301528660648301526064825260a0820182811067ffffffffffffffff821117610b935785527f5afecd570d316b57671383af0d5516c8bc44dd91593c1e87da59aafeeeec4d1a94939291610b7f91612508565b549082519586528501523393a36001805580f35b634e487b7160e01b895260418a52602489fd5b825163d3df19d760e01b81528790fd5b8251631e9acf1760e31b81528790fd5b809250848092503d8311610bf0575b610bdf81836123fc565b8101031261074d5785905138610a71565b503d610bd5565b84513d89823e3d90fd5b51622bdc4960e81b81528490fd5b509034610366576020366003190112610366578235610c2c61247b565b610c34612499565b808352600a60205281832080546001600160a01b039081169391908415610d21576005820180549760ff8916610d1357863303610d05576002840154421115610cf7575060017f14daf7c9aaaaebbbf225c137c34effb41a22db92d3f36b3bd6cb258ef86bb7e69596979860ff19161790556003820191428355610cdf60018201978854907f00000000000000000000000000000000000000000000000000000000000000006124bc565b54169454905482519182526020820152a36001805580f35b845163ade6444160e01b8152fd5b84516335e5194560e21b8152fd5b84516337f6b78d60e11b8152fd5b825163dbe2f06160e01b81528790fd5b5082903461031f57602036600319011261031f5781358152600660205282812080546001600160a01b031615610d95576003015491546060939091828410610d8457915b81519384526020840152820152f35b50610d8f83836123bd565b91610d75565b835163635e873760e01b81528390fd5b50913461058d578160031936011261058d57610dbf61200d565b813584526006602052828420805490926001600160a01b039291831615610dfe575093600560ff93859360209716835201855220541690519015158152f35b845163635e873760e01b8152fd5b503461031f57602036600319011261031f5782358152600660205281902080549092906001600160a01b031615610e4d575061044b600661039c9301612570565b905163635e873760e01b8152fd5b50913461058d57602036600319011261058d57803590610e79612067565b8115610eb95750907fa600e1d3f78668dd527dd5f21a246cd8926111837dafe911fddca7a7aa05227591600554908060055582519182526020820152a180f35b8251631ffb86f160e21b8152fd5b50903461036657816003193601126103665751908152602090f35b5082903461031f57606036600319011261031f5750610f0990604435906024359035612ed4565b8251838152928392610f1d91840190611fd0565b9060208301520390f35b50913461058d578160031936011261058d57610f41612023565b602435927fbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b268552602091858352818620338752835260ff8287205416156110e457610f8a61247b565b610f92612499565b6001600160a01b038181169485156110d65786156110c8576024857f0000000000000000000000000000000000000000000000000000000000000000938651928380926370a0823160e01b8252308783015287165afa9081156110be579088918a91611089575b501061107b5750857faaeda929aa102e867049528ec7cd2499e3a2f8846e736ae7935f234dfbf500d994939261106d92600160075401806007558a5260088652848a2060036001600160601b0360a01b918a83825416178155856001820155426002820155019033908254161790556124bc565b519384523393a36001805580f35b8351631e9acf1760e31b8152fd5b809250878092503d83116110b7575b6110a281836123fc565b810103126110b35787905138610ff9565b8880fd5b503d611098565b85513d8b823e3d90fd5b835163162908e360e11b8152fd5b8351634e46966960e11b8152fd5b8151632e462da160e21b81528490fd5b50913461058d578160031936011261058d578160209360ff9261111561200d565b903582528186528282206001600160a01b039091168252855220549151911615158152f35b50913461058d578260031936011261058d5760209250549051908152f35b503461031f57602036600319011261031f5782358152600a60205281902080546001600160a01b0316919082156111e1573383036111d15760c09360018201549260028301549060ff600585015416926003850154940154948151968752602087015285015215156060840152608083015260a0820152f35b81516335e5194560e21b81528490fd5b815163dbe2f06160e01b81528490fd5b50903461036657816003193601126103665761039c90610388612aa2565b50903461036657816003193601126103665760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589161124d612067565b61125561247b565b600160ff19600254161760025551338152a180f35b5091903461058d578260031936011261058d5780516370a0823160e01b815230928101929092526020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156113125783926112db575b6020838351908152f35b9091506020813d821161130a575b816112f6602093836123fc565b8101031261058d57602092505190386112d1565b3d91506112e9565b81513d85823e3d90fd5b503461031f57602036600319011261031f575061133b60209235612e6c565b90519015158152f35b5090346103665760208060031936011261058d5783359160008051602061318d8339815191528452838252808420338552825260ff8185205416156114af5761138b61247b565b611393612499565b8284526006825280842080549092906001600160a01b03161561149f578583015460ff8160a01c1661148f5760a81c60ff1661147f576113d2846125d5565b61146f57600583019033865281815260ff838720541661145f57338652528320805460ff19166001179055600381018054600019811461144c57600101905561141f903390600601612163565b33907f34647120636ce03d739347e28e9d1bdd34fd03d066ae60439fb1be2721ad16cd8380a36001805580f35b634e487b7160e01b855260118652602485fd5b8251637c9a1cf960e01b81528790fd5b81516328a7237960e01b81528690fd5b815163029684ff60e61b81528690fd5b82516351618d5360e01b81528790fd5b815163635e873760e01b81528690fd5b51630a12f25960e21b81528490fd5b50913461058d578260031936011261058d5760a0925054906005546003549060ff6002541692805194600180881b037f00000000000000000000000000000000000000000000000000000000000000001686526020860152840152606083015215156080820152f35b50913461058d57602036600319011261058d57358252600860209081529181902080546001820154600283015460039093015493516001600160a01b039283168152948501526040840191909152166060820152608090f35b503461031f57602036600319011261031f5782358152600660205281902080549092906001600160a01b031615610e4d5750600660209201549051908152f35b503461031f57506115d96115d336611f81565b90612fdb565b8251838152928392610f1d91840190611f9c565b5082903461031f57602036600319011261031f5781358152600860205282902080546001600160a01b039390841692909190831561166257506001810154600282015460039092015492516001600160a01b039485168152602081019190915260408101919091529216166060820152608090f35b8251631759957f60e31b8152fd5b50903461036657816003193601126103665760209060ff6002541690519015158152f35b503461031f57602036600319011261031f575061133b602092356125d5565b5090346103665781600319360112610366576020905160328152f35b50913461058d578160031936011261058d578160209360ff926116f061200d565b90358252600686528282206001600160a01b039091168252600501855220549151911615158152f35b5091903461058d57602036600319011261058d5760a092823591828252600660205280822093600180871b0385541615159485948495611784575b509060ff91015482519586528181881c161515602087015260a81c16151590840152151560608301526080820152f35b61178f9194506125d5565b928315806117f2575b806117e1575b6117a9575b38611754565b6117ba6002820154600554906125c8565b8042106117c8575b506117a3565b60ff929195506117d99042906123bd565b9490916117c2565b5060ff8282015460a81c161561179e565b5060ff82820154881c1615611798565b50913461058d578260031936011261058d5761181c612067565b6002549060ff82161561185e575060ff1916600255513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a180f35b8251638dfc202b60e01b8152fd5b5091903461058d57602036600319011261058d5781359182845260066020528184209360018060a01b039283865416948515611996576118ab906125d5565b15938480611985575b80611974575b61193f575b61192d9293600188015497600281015491810154916118e5600660038401549301612570565b9480519a8b9a8b5260208b015289015260ff8260a01c161515606089015260ff8260a81c161515608089015260a08801521660c08601526101408060e0870152850190611fd0565b91156101008401526101208301520390f35b6119506002880154600554906125c8565b80421061195e575b506118bf565b61192d935061196e9042906123bd565b92611958565b5060ff8488015460a81c16156118ba565b5060ff8488015460a01c16156118b4565b815163635e873760e01b81528490fd5b5090346103665781600319360112610366576020906005549051908152f35b5090346103665780600319360112610366576119df61200d565b90336001600160a01b038316036119fc57506108309192356121bd565b5163334bd91960e11b81528390fd5b50903461036657816003193601126103665761044b81837fbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b2661039c9552600c60205220612570565b50913461058d578160031936011261058d578035611a6f61200d565b90808552602091858352611a88600186882001546120bf565b6001600160a01b03937f000000000000000000000000000000000000000000000000000000000000000085163303611b1f5750611ac581836120e5565b50818652600d835284862093811693848752835260ff858720541615611ae9578580f35b611afc90828752600c8452858720612163565b8452600d8152828420918452528120805460ff1916600117905538808080808580f35b855163f5201fe560e01b8152fd5b5091903461058d578260031936011261058d5760075491611b4d83612436565b92600191825b82811115611b705784516020808252819061039c90820189611f9c565b6000198101818111611b90579080611b898693896125f7565b5201611b53565b634e487b7160e01b885260118352602488fd5b50903461036657816003193601126103665761044b81838061039c9552600c60205220612570565b503461031f57506115d9611bde36611f81565b90612932565b50913461058d57602036600319011261058d57816020936001923581528085522001549051908152f35b509034610366578160031936011261036657602090517fbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b268152f35b503461031f57506115d9611c5c36611f81565b906130ab565b50903461036657816003193601126103665760209051603c8152f35b50913461058d57602036600319011261058d57803560008051602061318d83398151915284528360205282842033855260205260ff838520541615611de957611cc561247b565b611ccd612499565b808452600660205282842080546001600160a01b03908116939091908415611ddb578082019081549060ff8260a01c16611dcd5760ff8260a81c16611dbf57611d15866125d5565b611db1576003840154815411611da357506001600160a81b0319163317600160a01b1790556001810180549094611d6d91907f00000000000000000000000000000000000000000000000000000000000000006124bc565b5416915492519283527f3fb8665e50a1e284631acc76d721090605355356a5e26e9c2301c02a02add27a60203394a46001805580f35b8751633048076b60e11b8152fd5b87516328a7237960e01b8152fd5b875163029684ff60e61b8152fd5b87516351618d5360e01b8152fd5b855163635e873760e01b8152fd5b509051630a12f25960e21b8152fd5b50913461058d57602036600319011261058d578035611e15612067565b8015611e525790817fe10a705edb4af55d916591ab3ae6d73d13195159890a14a90b10ae1117f9ea3793928254925582519182526020820152a180f35b50905163458bb42160e01b8152fd5b503461031f57506115d9611e7436611f81565b906127ca565b50903461036657816003193601126103665760209051600a8152f35b503461031f57506115d9611ea936611f81565b9061260b565b50913461058d57602036600319011261058d57359063ffffffff60e01b821680920361058d5760209250637965db0b60e01b8214918215611ef4575b50519015158152f35b6301ffc9a760e01b14915038611eeb565b9050828434611f7d576020366003190112611f7d5790818160e09560ff9435815260066020522060018060a01b03918282541693600183015460028401549260038501549401549588526020880152860152606085015281166080840152818160a01c16151560a084015260a81c16151560c0820152f35b8380fd5b6040906003190112611f97576004359060243590565b600080fd5b90815180825260208080930193019160005b828110611fbc575050505090565b835185529381019392810192600101611fae565b90815180825260208080930193019160005b828110611ff0575050505090565b83516001600160a01b031685529381019392810192600101611fe2565b602435906001600160a01b0382168203611f9757565b600435906001600160a01b0382168203611f9757565b80548210156120515760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205460ff16156120a15750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b80600052600060205260406000203360005260205260ff60406000205416156120a15750565b9060009180835282602052604083209160018060a01b03169182845260205260ff6040842054161560001461215e57808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b90815491600160401b8310156121a757826121869160016121a595018155612039565b90919082549060031b9160018060a01b03809116831b921b1916179055565b565b634e487b7160e01b600052604160045260246000fd5b919091801580612312575b612300576121d68382612348565b90600090808252600d602052604082209060018060a01b038096169182845260205260ff60408420541661220d575b509193505050565b808352600c6020526040832095865496845b888110612253575b5050506040939495508252600d6020528282209082526020522060ff1981541690558190388080612205565b8085612260859385612039565b959054600396871b1c161461227a5790925060010161221f565b60001999808b019081116122ec57906121868361229a6122a89487612039565b905490881b1c169185612039565b81549889156122d857604097989901926122c28484612039565b81939154921b1b19169055558594933880612227565b634e487b7160e01b87526031600452602487fd5b634e487b7160e01b88526011600452602488fd5b6040516325c457fd60e11b8152600490fd5b506001600160a01b038381167f0000000000000000000000000000000000000000000000000000000000000000909116146121c8565b9060009180835282602052604083209160018060a01b03169182845260205260ff60408420541660001461215e5780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b919082039182116123ca57565b634e487b7160e01b600052601160045260246000fd5b6020810190811067ffffffffffffffff8211176121a757604052565b90601f8019910116810190811067ffffffffffffffff8211176121a757604052565b67ffffffffffffffff81116121a75760051b60200190565b906124408261241e565b61244d60405191826123fc565b828152809261245e601f199161241e565b0190602036910137565b818102929181159184041417156123ca57565b60ff6002541661248757565b60405163d93c066560e01b8152600490fd5b6002600154146124aa576002600155565b604051633ee5aeb560e01b8152600490fd5b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152608081019167ffffffffffffffff8311828410176121a7576121a5926040525b906000602091828151910182855af115612564576000513d61255b57506001600160a01b0381163b155b6125395750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b60011415612532565b6040513d6000823e3d90fd5b9060405191828154918282526020928383019160005283600020936000905b8282106125a5575050506121a5925003836123fc565b85546001600160a01b03168452600195860195889550938101939091019061258f565b919082018092116123ca57565b60005260066020526125f2600260406000200154600554906125c8565b421190565b80518210156120515760209160051b010190565b9190801580156127c0575b6127ae57821561279c576003549160009360015b8481111561274e575060001981019081116123ca578261264991612468565b91848310156127315761265c90836125c8565b93808511612729575b61266f83866123bd565b9161267983612436565b91600091829460015b8881111580612720575b156127125780600052600660205260046040600020015460ff6001818360a01c161515149182612704575b50506126c6575b600101612682565b9587811015806126fb575b6126df575b600101956126be565b9360018082896126f083958b6125f7565b5201959150506126d6565b508981106126d1565b60a81c1615905038806126b7565b505095509550509150509190565b5081851061268c565b935083612665565b50915050604051612741816123e0565b6000815260003681379190565b80600052600660205260046040600020015460ff6001818360a01c16151514918261278e575b5050612783575b60010161262a565b60019095019461277b565b60a81c161590503880612774565b6040516301d4059160e51b8152600490fd5b6040516372dbed9760e11b8152600490fd5b5060328111612616565b919080158015612928575b6127ae57821561279c576003549160009360015b848111156128de575060001981019081116123ca578261280891612468565b91848310156127315761281b90836125c8565b938085116128d6575b61282e83866123bd565b9161283883612436565b91600091829460015b88811115806128cd575b156127125780600052600660205260046040600020015460ff808260a01c161591826128bf575b5050612881575b600101612841565b9587811015806128b6575b61289a575b60010195612879565b9360018082896128ab83958b6125f7565b520195915050612891565b5089811061288c565b60a81c161590503880612872565b5081851061284b565b935083612824565b80600052600660205260046040600020015460ff808260a01c1615918261291a575b505061290f575b6001016127e9565b600190950194612907565b60a81c161590503880612900565b50603281116127d5565b919080158015612a98575b6127ae57821561279c576003549160009360015b84811115612a4a575060001981019081116123ca578261297091612468565b91848310156127315761298390836125c8565b93808511612a42575b61299683866123bd565b916129a083612436565b91600091829460015b8881111580612a39575b156127125780600052600660205260046040600020015460ff808260a01c16159182612a27575b50506129e9575b6001016129a9565b958781101580612a1e575b612a02575b600101956129e1565b936001808289612a1383958b6125f7565b5201959150506129f9565b508981106129f4565b6001925060a81c1615151438806129da565b508185106129b3565b93508361298c565b80600052600660205260046040600020015460ff808260a01c16159182612a86575b5050612a7b575b600101612951565b600190950194612a73565b6001925060a81c161515143880612a6c565b506032811161293d565b60035460009160015b82811115612b7f57508215612b7157603290838211612b69575b612ace82612436565b6000809260015b8681111580612b60575b15612b555780600052600660205260046040600020015460ff808260a01c16159182612b43575b5050612b15575b600101612ad5565b93858110612b27575b60010193612b0d565b916001808287612b388395896125f7565b520193915050612b1e565b6001925060a81c161515143880612b06565b509450509150509190565b50858310612adf565b839150612ac5565b9050604051612741816123e0565b80600052600660205260046040600020015460ff808260a01c16159182612bbb575b5050612bb0575b600101612aab565b600190930192612ba8565b6001925060a81c161515143880612ba1565b60035460009160015b82811115612c9157508215612b7157603290838211612c89575b612bf982612436565b6000809260015b8681111580612c80575b15612b555780600052600660205260046040600020015460ff6001818360a01c161515149182612c72575b5050612c44575b600101612c00565b93858110612c56575b60010193612c3c565b916001808287612c678395896125f7565b520193915050612c4d565b60a81c161590503880612c35565b50858310612c0a565b839150612bf0565b80600052600660205260046040600020015460ff6001818360a01c161515149182612cd1575b5050612cc6575b600101612bd6565b600190930192612cbe565b60a81c161590503880612cb7565b60035460009160015b82811115612d9f57508215612b7157603290838211612d97575b612d0b82612436565b6000809260015b8681111580612d8e575b15612b555780600052600660205260046040600020015460ff808260a01c16159182612d80575b5050612d52575b600101612d12565b93858110612d64575b60010193612d4a565b916001808287612d758395896125f7565b520193915050612d5b565b60a81c161590503880612d43565b50858310612d1c565b839150612d02565b80600052600660205260046040600020015460ff808260a01c16159182612ddb575b5050612dd0575b600101612ce8565b600190930192612dc8565b60a81c161590503880612dc1565b600090815260066020526040902080546001600160a01b031615612e5a57600481015460ff8160a01c16908115612e4c575b50612e465760020154600554612e30916125c8565b80421015612e4657612e439042906123bd565b90565b50600090565b60ff915060a81c1638612e1b565b60405163635e873760e01b8152600490fd5b600081815260066020526040902080549091906001600160a01b031615612ebf57600482015460ff8160a01c16908115612ec6575b50612ebf57612eaf906125d5565b612e465760030154600454111590565b5050600090565b60ff915060a81c1638612ea1565b6000908152600660205260408120805492949391926001600160a01b039190821615612e5a5782158015612fd1575b6127ae57851561279c576006018054956000198101908111612fbd5783612f2991612468565b9286841015612fa257612f3c90846125c8565b83878211612f9a575b612f4e916123bd565b92612f5884612436565b945b848110612f6a5750505050509190565b8084612f81612f7b600194866125c8565b86612039565b90549060031b1c16612f9382896125f7565b5201612f5a565b879150612f45565b5050505060405190612fb3826123e0565b8082523681379190565b634e487b7160e01b85526011600452602485fd5b5060328311612f03565b9190801580156130a1575b6127ae57821561279c576007549260001981019081116123ca578161300a91612468565b90838210156130935761301d90826125c8565b8184821161308b575b61302f916123bd565b9061303982612436565b91600091825b82811061304e57505050509190565b61305881836125c8565b906001918281018091116130775761307082886125f7565b520161303f565b634e487b7160e01b86526011600452602486fd5b849150613026565b5050604051612741816123e0565b5060328111612fe6565b919080158015613182575b6127ae57821561279c57600090338252600b60205260408220805494600019810190811161316e57826130e891612468565b918583101561315e576130fb90836125c8565b82868211613156575b61310d916123bd565b9161311783612436565b935b83811061312857505050509190565b8061313e613138600193856125c8565b85612039565b90549060031b1c61314f82886125f7565b5201613119565b869150613104565b50505060405190612fb3826123e0565b634e487b7160e01b84526011600452602484fd5b50603281116130b656fea5a0b70b385ff7611cd3840916bd08b10829e5bf9e6637cf79dd9a427fc0e2aba2646970667358221220dba63b7ae1b7b68cb06f5fcd73ca83e4e2e58e0187ae39f4086ea1fb06248d0664736f6c634300081400332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0dbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b26a5a0b70b385ff7611cd3840916bd08b10829e5bf9e6637cf79dd9a427fc0e2ab00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000151800000000000000000000000001e0e2ea5e1193481376770762572790da851b1ce