0 txs
3 calls
constructor
constructor()
functions
_hatchToken
viewfunction _hatchToken() view returns (address)
_stakes
viewfunction _stakes(address user, uint256) view returns (uint256 amount, uint256 stakedAt)
_stakingCaps
viewfunction _stakingCaps(address user) view returns (uint256)
_totalStakedBundles
viewfunction _totalStakedBundles() view returns (uint256)
_totalStakedTokens
viewfunction _totalStakedTokens(address user) view returns (uint256 stakedAmount)
canWithdraw
viewfunction canWithdraw(address user) view returns (bool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStakes
viewfunction getStakes(address user) view returns (tuple[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
LOCK_PERIOD
viewfunction LOCK_PERIOD() view returns (uint256)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
STAKE_UNIT
viewfunction STAKE_UNIT() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
UPGRADER_ROLE
viewfunction UPGRADER_ROLE() view returns (bytes32)
batchUpdateStakingCaps
nonpayablefunction batchUpdateStakingCaps(address[] users, uint256[] newCaps)
batchWithdraw
nonpayablefunction batchWithdraw()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin, address hatchToken, address[] initialStakers, uint256[] initialStakingCaps)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
stake
nonpayablefunction stake(uint256 stakeAmount)
transferContractOwnership
nonpayablefunction transferContractOwnership(address newOwner)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw()
events
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner, uint256 timestamp, address initiatedBy)
Paused
event Paused(address account)
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)
Staked
event Staked(address indexed user, uint256 amount, uint256 stakedAt, uint256 bundleStaked, uint256 previousTotalBundles)
StakingCapInitialized
event StakingCapInitialized(address[] users, uint256[] newCaps, uint256 timestamp)
StakingCapUpdated
event StakingCapUpdated(address[] users, uint256[] newCaps, uint256 timestamp)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
Withdrawn
event Withdrawn(address indexed user, uint256 amount, uint256 withdrawnAt)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b620001cf565b60006200006d6200016560201b60201c565b90508060000160089054906101000a900460ff1615620000b9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80168160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614620001625767ffffffffffffffff8160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001599190620001b2565b60405180910390a15b50565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b600067ffffffffffffffff82169050919050565b620001ac816200018d565b82525050565b6000602082019050620001c96000830184620001a1565b92915050565b608051613fac620001f960003960008181612075015281816120ca01526122a80152613fac6000f3fe6080604052600436106101cd5760003560e01c80637ba6f458116100f7578063a694fc3a11610095578063d547741f11610064578063d547741f14610658578063e63ab1e914610681578063ed3c6694146106ac578063f72c0d8b146106d5576101cd565b8063a694fc3a146105b0578063a843c51f146105d9578063ad3cb1cc14610602578063b8cad1e51461062d576101cd565b80638b38e59a116100d15780638b38e59a1461050857806391d148541461051f5780639c15dcfe1461055c578063a217fddf14610585576101cd565b80637ba6f458146104895780638109c2f1146104c65780638456cb59146104f1576101cd565b806336568abe1161016f57806350b0e0291161013e57806350b0e029146103b857806352d1902d146103f55780635c975abb14610420578063695d794b1461044b576101cd565b806336568abe146103455780633ccfd60b1461036e5780633f4ba83a146103855780634f1ef2861461039c576101cd565b806319262d30116101ab57806319262d3014610277578063248a9ca3146102b45780632f2ff15d146102f157806330be38d41461031a576101cd565b806301ffc9a7146101d25780630774f29c1461020f5780631820cabb1461024c575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612c50565b610700565b6040516102069190612c98565b60405180910390f35b34801561021b57600080fd5b5061023660048036038101906102319190612d11565b61077a565b6040516102439190612d57565b60405180910390f35b34801561025857600080fd5b50610261610792565b60405161026e9190612d57565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612d11565b610799565b6040516102ab9190612c98565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190612da8565b61089b565b6040516102e89190612de4565b60405180910390f35b3480156102fd57600080fd5b5061031860048036038101906103139190612dff565b6108c9565b005b34801561032657600080fd5b5061032f6108eb565b60405161033c9190612d57565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612dff565b6108f1565b005b34801561037a57600080fd5b5061038361096c565b005b34801561039157600080fd5b5061039a610bc2565b005b6103b660048036038101906103b19190612f85565b610bf7565b005b3480156103c457600080fd5b506103df60048036038101906103da9190612d11565b610c16565b6040516103ec9190612d57565b60405180910390f35b34801561040157600080fd5b5061040a610c2e565b6040516104179190612de4565b60405180910390f35b34801561042c57600080fd5b50610435610c61565b6040516104429190612c98565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061300d565b610c86565b60405161048092919061304d565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612d11565b610cc7565b6040516104bd9190613163565b60405180910390f35b3480156104d257600080fd5b506104db610d79565b6040516104e891906131e4565b60405180910390f35b3480156104fd57600080fd5b50610506610d9d565b005b34801561051457600080fd5b5061051d610dd2565b005b34801561052b57600080fd5b5061054660048036038101906105419190612dff565b61109e565b6040516105539190612c98565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e91906132b5565b611117565b005b34801561059157600080fd5b5061059a61126c565b6040516105a79190612de4565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613336565b611273565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190612d11565b6114bc565b005b34801561060e57600080fd5b5061061761160b565b60405161062491906133e2565b60405180910390f35b34801561063957600080fd5b50610642611644565b60405161064f9190612d57565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190612dff565b611652565b005b34801561068d57600080fd5b50610696611674565b6040516106a39190612de4565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190613404565b611698565b005b3480156106e157600080fd5b506106ea611a31565b6040516106f79190612de4565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610773575061077282611a55565b5b9050919050565b60036020528060005260406000206000915090505481565b6276a70081565b600080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161081f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610816906134f7565b60405180910390fd5b6276a700600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154811061087557610874613517565b5b9060005260206000209060020201600101546108919190613575565b4210159050919050565b6000806108a6611abf565b905080600001600084815260200190815260200160002060010154915050919050565b6108d28261089b565b6108db81611ae7565b6108e58383611afb565b50505050565b60045481565b6108f9611bfc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461095d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109678282611c04565b505050565b610974611d06565b61097c611d47565b61098533611d9e565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815481106109d9576109d8613517565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201548152505090506276a7008160200151610a1b9190613575565b421015610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a549061361b565b60405180910390fd5b8060000151600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ab0919061363b565b92505081905550610ac033611e26565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600001516040518363ffffffff1660e01b8152600401610b1f92919061367e565b6020604051808303816000875af1158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906136d3565b503373ffffffffffffffffffffffffffffffffffffffff167f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6826000015142604051610baf92919061304d565b60405180910390a250610bc0611fe8565b565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bec81611ae7565b610bf4612001565b50565b610bff612073565b610c0882612159565b610c128282612187565b5050565b60026020528060005260406000206000915090505481565b6000610c386122a6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b600080610c6c61232d565b90508060000160009054906101000a900460ff1691505090565b60016020528160005260406000208181548110610ca257600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b6060600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610d6e57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610d28565b505050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610dc781611ae7565b610dcf612355565b50565b610dda611d06565b610de2611d47565b610deb33611d9e565b60005b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111561105057600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610e8d57610e8c613517565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201548152505090506276a7008160200151610ecf9190613575565b4210611042578060000151600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f28919061363b565b92505081905550610f3833611e26565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600001516040518363ffffffff1660e01b8152600401610f9792919061367e565b6020604051808303816000875af1158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda91906136d3565b508280610fe690613700565b9350503373ffffffffffffffffffffffffffffffffffffffff167f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc682600001514260405161103592919061304d565b60405180910390a2611049565b5050611050565b5050610dee565b60008111611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613794565b60405180910390fd5b5061109c611fe8565b565b6000806110a9611abf565b905080600001600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b6000801b61112481611ae7565b61113485859050848490506123c7565b60005b858590508110156112255761117286868381811061115857611157613517565b5b905060200201602081019061116d9190612d11565b61240d565b61119484848381811061118857611187613517565b5b9050602002013561247f565b8383828181106111a7576111a6613517565b5b90506020020135600260008888858181106111c5576111c4613517565b5b90506020020160208101906111da9190612d11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050611137565b507f93ae4069ee49c56badb4bb9f2ef4a8d347f0bc28ddb6c0e5a894df0c1daf366e858585854260405161125d9594939291906138f2565b60405180910390a15050505050565b6000801b81565b61127b611d06565b611283611d47565b61128d33826124c5565b61129733826125f9565b600069010f0cf064dd59200000826112af919061396a565b905060006004549050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052808581526020014281525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505082600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461139a9190613575565b9250508190555081600460008282546113b39190613575565b9250508190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016114179392919061399b565b6020604051808303816000875af1158015611436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145a91906136d3565b503373ffffffffffffffffffffffffffffffffffffffff167f9cfd25589d1eb8ad71e342a86a8524e83522e3936c0803048c08f6d9ad974f40844285856040516114a794939291906139d2565b60405180910390a250506114b9611fe8565b50565b6000801b6114c981611ae7565b6114d28261240d565b60003390506114e46000801b33611c04565b5061150f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611c04565b5061153a7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e333611c04565b506115486000801b84611afb565b506115737f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a84611afb565b5061159e7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e384611afb565b508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1fb25c9e60d7a2ccc6262983e9e56cec2491bb6aad543e1e25459c789b313ced42336040516115fe929190613a17565b60405180910390a3505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b69010f0cf064dd5920000081565b61165b8261089b565b61166481611ae7565b61166e8383611c04565b50505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60006116a26126e0565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156116f05750825b9050600060018367ffffffffffffffff16148015611725575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015611733575080155b1561176a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156117ba5760018560000160086101000a81548160ff0219169083151502179055505b6117c38a61240d565b6117d389899050888890506123c7565b6117db612708565b6117e361271a565b6117eb612724565b6117f3612736565b896000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005b89899050811015611924576118718a8a8381811061185757611856613517565b5b905060200201602081019061186c9190612d11565b61240d565b61189388888381811061188757611886613517565b5b9050602002013561247f565b8787828181106118a6576118a5613517565b5b90506020020135600260008c8c858181106118c4576118c3613517565b5b90506020020160208101906118d99190612d11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050611836565b506119326000801b8c611afb565b5061195d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8c611afb565b506119887f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38c611afb565b507f3e1a45ca59820608c4646e61f1b3ff6838ecc3466e2569c77fb62ca7be0191ba89898989426040516119c09594939291906138f2565b60405180910390a18315611a245760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051611a1b9190613a8f565b60405180910390a15b5050505050505050505050565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e381565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b611af881611af3611bfc565b612740565b50565b600080611b06611abf565b9050611b12848461109e565b611bf057600181600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b8c611bfc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611bf6565b60009150505b92915050565b600033905090565b600080611c0f611abf565b9050611c1b848461109e565b15611cfa57600081600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c96611bfc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001915050611d00565b60009150505b92915050565b611d0e610c61565b15611d45576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000611d51612791565b90506002816000015403611d91576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002816000018190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a906134f7565b60405180910390fd5b50565b60005b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611e77919061363b565b811015611f6c57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182611eca9190613575565b81548110611edb57611eda613517565b5b9060005260206000209060020201600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611f3a57611f39613517565b5b906000526020600020906002020160008201548160000155600182015481600101559050508080600101915050611e29565b50600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611fbc57611fbb613aaa565b5b600190038181906000526020600020906002020160008082016000905560018201600090555050905550565b6000611ff2612791565b90506001816000018190555050565b6120096127b9565b600061201361232d565b905060008160000160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61205b611bfc565b6040516120689190613ad9565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061212057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166121076127f9565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612157576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e361218381611ae7565b5050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156121ef57506040513d601f19601f820116820180604052508101906121ec9190613b09565b60015b61223057816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016122279190613ad9565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461229757806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161228e9190612de4565b60405180910390fd5b6122a18383612850565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461232b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b61235d611d06565b600061236761232d565b905060018160000160006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586123af611bfc565b6040516123bc9190613ad9565b60405180910390a150565b808214612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090613ba8565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613c14565b60405180910390fd5b50565b600081116124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b990613ca6565b60405180910390fd5b50565b6000811180156124ea5750600069010f0cf064dd59200000826124e89190613cc6565b145b612529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252090613d69565b60405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826125b49190613575565b11156125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90613dfb565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016126559190613ad9565b602060405180830381865afa158015612672573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126969190613e30565b9050818110156126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d290613ecf565b60405180910390fd5b505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6127106128c3565b612718612903565b565b6127226128c3565b565b61272c6128c3565b612734612924565b565b61273e6128c3565b565b61274a828261109e565b61278d5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612784929190613eef565b60405180910390fd5b5050565b60007f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00905090565b6127c1610c61565b6127f7576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006128277f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612958565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61285982612962565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a26000815111156128b6576128b08282612a2f565b506128bf565b6128be612ab3565b5b5050565b6128cb612af0565b612901576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61290b6128c3565b6000612915612791565b90506001816000018190555050565b61292c6128c3565b600061293661232d565b905060008160000160006101000a81548160ff02191690831515021790555050565b6000819050919050565b60008173ffffffffffffffffffffffffffffffffffffffff163b036129be57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016129b59190613ad9565b60405180910390fd5b806129eb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612958565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808473ffffffffffffffffffffffffffffffffffffffff1684604051612a599190613f5f565b600060405180830381855af49150503d8060008114612a94576040519150601f19603f3d011682016040523d82523d6000602084013e612a99565b606091505b5091509150612aa9858383612b10565b9250505092915050565b6000341115612aee576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000612afa6126e0565b60000160089054906101000a900460ff16905090565b606082612b2557612b2082612b9f565b612b97565b60008251148015612b4d575060008473ffffffffffffffffffffffffffffffffffffffff163b145b15612b8f57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612b869190613ad9565b60405180910390fd5b819050612b98565b5b9392505050565b600081511115612bb25780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c2d81612bf8565b8114612c3857600080fd5b50565b600081359050612c4a81612c24565b92915050565b600060208284031215612c6657612c65612bee565b5b6000612c7484828501612c3b565b91505092915050565b60008115159050919050565b612c9281612c7d565b82525050565b6000602082019050612cad6000830184612c89565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cde82612cb3565b9050919050565b612cee81612cd3565b8114612cf957600080fd5b50565b600081359050612d0b81612ce5565b92915050565b600060208284031215612d2757612d26612bee565b5b6000612d3584828501612cfc565b91505092915050565b6000819050919050565b612d5181612d3e565b82525050565b6000602082019050612d6c6000830184612d48565b92915050565b6000819050919050565b612d8581612d72565b8114612d9057600080fd5b50565b600081359050612da281612d7c565b92915050565b600060208284031215612dbe57612dbd612bee565b5b6000612dcc84828501612d93565b91505092915050565b612dde81612d72565b82525050565b6000602082019050612df96000830184612dd5565b92915050565b60008060408385031215612e1657612e15612bee565b5b6000612e2485828601612d93565b9250506020612e3585828601612cfc565b9150509250929050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e9282612e49565b810181811067ffffffffffffffff82111715612eb157612eb0612e5a565b5b80604052505050565b6000612ec4612be4565b9050612ed08282612e89565b919050565b600067ffffffffffffffff821115612ef057612eef612e5a565b5b612ef982612e49565b9050602081019050919050565b82818337600083830152505050565b6000612f28612f2384612ed5565b612eba565b905082815260208101848484011115612f4457612f43612e44565b5b612f4f848285612f06565b509392505050565b600082601f830112612f6c57612f6b612e3f565b5b8135612f7c848260208601612f15565b91505092915050565b60008060408385031215612f9c57612f9b612bee565b5b6000612faa85828601612cfc565b925050602083013567ffffffffffffffff811115612fcb57612fca612bf3565b5b612fd785828601612f57565b9150509250929050565b612fea81612d3e565b8114612ff557600080fd5b50565b60008135905061300781612fe1565b92915050565b6000806040838503121561302457613023612bee565b5b600061303285828601612cfc565b925050602061304385828601612ff8565b9150509250929050565b60006040820190506130626000830185612d48565b61306f6020830184612d48565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130ab81612d3e565b82525050565b6040820160008201516130c760008501826130a2565b5060208201516130da60208501826130a2565b50505050565b60006130ec83836130b1565b60408301905092915050565b6000602082019050919050565b600061311082613076565b61311a8185613081565b935061312583613092565b8060005b8381101561315657815161313d88826130e0565b9750613148836130f8565b925050600181019050613129565b5085935050505092915050565b6000602082019050818103600083015261317d8184613105565b905092915050565b6000819050919050565b60006131aa6131a56131a084612cb3565b613185565b612cb3565b9050919050565b60006131bc8261318f565b9050919050565b60006131ce826131b1565b9050919050565b6131de816131c3565b82525050565b60006020820190506131f960008301846131d5565b92915050565b600080fd5b600080fd5b60008083601f84011261321f5761321e612e3f565b5b8235905067ffffffffffffffff81111561323c5761323b6131ff565b5b60208301915083602082028301111561325857613257613204565b5b9250929050565b60008083601f84011261327557613274612e3f565b5b8235905067ffffffffffffffff811115613292576132916131ff565b5b6020830191508360208202830111156132ae576132ad613204565b5b9250929050565b600080600080604085870312156132cf576132ce612bee565b5b600085013567ffffffffffffffff8111156132ed576132ec612bf3565b5b6132f987828801613209565b9450945050602085013567ffffffffffffffff81111561331c5761331b612bf3565b5b6133288782880161325f565b925092505092959194509250565b60006020828403121561334c5761334b612bee565b5b600061335a84828501612ff8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561339d578082015181840152602081019050613382565b60008484015250505050565b60006133b482613363565b6133be818561336e565b93506133ce81856020860161337f565b6133d781612e49565b840191505092915050565b600060208201905081810360008301526133fc81846133a9565b905092915050565b6000806000806000806080878903121561342157613420612bee565b5b600061342f89828a01612cfc565b965050602061344089828a01612cfc565b955050604087013567ffffffffffffffff81111561346157613460612bf3565b5b61346d89828a01613209565b9450945050606087013567ffffffffffffffff8111156134905761348f612bf3565b5b61349c89828a0161325f565b92509250509295509295509295565b7f48617463685374616b696e673a204e6f207374616b6520666f756e6400000000600082015250565b60006134e1601c8361336e565b91506134ec826134ab565b602082019050919050565b60006020820190508181036000830152613510816134d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061358082612d3e565b915061358b83612d3e565b92508282019050808211156135a3576135a2613546565b5b92915050565b7f48617463685374616b696e673a204c6f636b20706572696f64206e6f7420656e60008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b600061360560238361336e565b9150613610826135a9565b604082019050919050565b60006020820190508181036000830152613634816135f8565b9050919050565b600061364682612d3e565b915061365183612d3e565b925082820390508181111561366957613668613546565b5b92915050565b61367881612cd3565b82525050565b6000604082019050613693600083018561366f565b6136a06020830184612d48565b9392505050565b6136b081612c7d565b81146136bb57600080fd5b50565b6000815190506136cd816136a7565b92915050565b6000602082840312156136e9576136e8612bee565b5b60006136f7848285016136be565b91505092915050565b600061370b82612d3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361373d5761373c613546565b5b600182019050919050565b7f48617463685374616b696e673a204e6f206d6174757265207374616b65730000600082015250565b600061377e601e8361336e565b915061378982613748565b602082019050919050565b600060208201905081810360008301526137ad81613771565b9050919050565b600082825260208201905092915050565b6000819050919050565b6137d881612cd3565b82525050565b60006137ea83836137cf565b60208301905092915050565b60006138056020840184612cfc565b905092915050565b6000602082019050919050565b600061382683856137b4565b9350613831826137c5565b8060005b8581101561386a5761384782846137f6565b61385188826137de565b975061385c8361380d565b925050600181019050613835565b5085925050509392505050565b600082825260208201905092915050565b600080fd5b82818337505050565b60006138a28385613877565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156138d5576138d4613888565b5b6020830292506138e683858461388d565b82840190509392505050565b6000606082019050818103600083015261390d81878961381a565b90508181036020830152613922818587613896565b90506139316040830184612d48565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061397582612d3e565b915061398083612d3e565b9250826139905761398f61393b565b5b828204905092915050565b60006060820190506139b0600083018661366f565b6139bd602083018561366f565b6139ca6040830184612d48565b949350505050565b60006080820190506139e76000830187612d48565b6139f46020830186612d48565b613a016040830185612d48565b613a0e6060830184612d48565b95945050505050565b6000604082019050613a2c6000830185612d48565b613a39602083018461366f565b9392505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000613a79613a74613a6f84613a40565b613185565b613a4a565b9050919050565b613a8981613a5e565b82525050565b6000602082019050613aa46000830184613a80565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000602082019050613aee600083018461366f565b92915050565b600081519050613b0381612d7c565b92915050565b600060208284031215613b1f57613b1e612bee565b5b6000613b2d84828501613af4565b91505092915050565b7f48617463685374616b696e673a204172726179206c656e67746873206d69736d60008201527f6174636800000000000000000000000000000000000000000000000000000000602082015250565b6000613b9260248361336e565b9150613b9d82613b36565b604082019050919050565b60006020820190508181036000830152613bc181613b85565b9050919050565b7f48617463685374616b696e673a20496e76616c69642061646472657373000000600082015250565b6000613bfe601d8361336e565b9150613c0982613bc8565b602082019050919050565b60006020820190508181036000830152613c2d81613bf1565b9050919050565b7f48617463685374616b696e673a2056616c7565206d757374206265206772656160008201527f746572207468616e203000000000000000000000000000000000000000000000602082015250565b6000613c90602a8361336e565b9150613c9b82613c34565b604082019050919050565b60006020820190508181036000830152613cbf81613c83565b9050919050565b6000613cd182612d3e565b9150613cdc83612d3e565b925082613cec57613ceb61393b565b5b828206905092915050565b7f48617463685374616b696e673a20416d6f756e74206d7573742062652061206d60008201527f756c7469706c65206f66207374616b6520756e69740000000000000000000000602082015250565b6000613d5360358361336e565b9150613d5e82613cf7565b604082019050919050565b60006020820190508181036000830152613d8281613d46565b9050919050565b7f48617463685374616b696e673a20416d6f756e7420657863656564732073746160008201527f6b696e6720636170000000000000000000000000000000000000000000000000602082015250565b6000613de560288361336e565b9150613df082613d89565b604082019050919050565b60006020820190508181036000830152613e1481613dd8565b9050919050565b600081519050613e2a81612fe1565b92915050565b600060208284031215613e4657613e45612bee565b5b6000613e5484828501613e1b565b91505092915050565b7f48617463685374616b696e673a20496e73756666696369656e742062616c616e60008201527f636520746f207374616b65000000000000000000000000000000000000000000602082015250565b6000613eb9602b8361336e565b9150613ec482613e5d565b604082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b6000604082019050613f04600083018561366f565b613f116020830184612dd5565b9392505050565b600081519050919050565b600081905092915050565b6000613f3982613f18565b613f438185613f23565b9350613f5381856020860161337f565b80840191505092915050565b6000613f6b8284613f2e565b91508190509291505056fea26469706673582212208da63ccb090bda52894fe3a990f788f64699fb2096579f3b1d563f34588fb59664736f6c63430008160033