0 txs
69 calls
constructor
constructor(address admin_, string uri_, address accessRegistry_)
functions
accessRegistry
viewfunction accessRegistry() view returns (address)
activeLends
viewfunction activeLends(address lendee, uint256 keyId) view returns (tuple)
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
getKeyConfig
viewfunction getKeyConfig(uint256 keyId) view returns (tuple)
hasAllRoles
viewfunction hasAllRoles(address user, uint256 roles) view returns (bool result)
hasAnyRole
viewfunction hasAnyRole(address user, uint256 roles) view returns (bool result)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
isOperatorAllowed
viewfunction isOperatorAllowed(address operator) view returns (bool allowed)
isRegistered
viewfunction isRegistered(address vault) view returns (bool registered)
keyExchange
viewfunction keyExchange() view returns (address)
keysCreated
viewfunction keysCreated() view returns (uint256)
MAX_KEYS
viewfunction MAX_KEYS() view returns (uint256)
MAX_LEND_DURATION
viewfunction MAX_LEND_DURATION() view returns (uint256)
MIN_LEND_DURATION
viewfunction MIN_LEND_DURATION() view returns (uint256)
ordinalsFromRoles
purefunction ordinalsFromRoles(uint256 roles) pure returns (uint8[] ordinals)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
ownershipHandoverValidFor
viewfunction ownershipHandoverValidFor() view returns (uint64)
rolesFromOrdinals
purefunction rolesFromOrdinals(uint8[] ordinals) pure returns (uint256 roles)
rolesOf
viewfunction rolesOf(address user) view returns (uint256 roles)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
uri
viewfunction uri(uint256 tokenId) view returns (string)
burnKeys
nonpayablefunction burnKeys(address holder, uint256 keyId, uint256 amount)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
clearLendingTerms
nonpayablefunction clearLendingTerms(address lendee, uint256 keyId)
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
createKeys
nonpayablefunction createKeys(uint256 amount, address receiver, uint8 vaultType) returns (uint256)
freezeKeys
nonpayablefunction freezeKeys(uint256 keyId)
grantRoles
payablefunction grantRoles(address user, uint256 roles) payable
lendKeys
nonpayablefunction lendKeys(address lendee, uint256 keyId, uint256 lendAmount, uint256 lendDuration)
reclaimKeys
nonpayablefunction reclaimKeys(address lendee, uint256 keyId)
registerVault
nonpayablefunction registerVault(address vault)
renounceOwnership
payablefunction renounceOwnership() payable
renounceRoles
payablefunction renounceRoles(uint256 roles) payable
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
revokeRoles
payablefunction revokeRoles(address user, uint256 roles) payable
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data)
setAccessRegistry
nonpayablefunction setAccessRegistry(address newAccessRegistry)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setKeyExchange
nonpayablefunction setKeyExchange(address newKeyExchange)
setURI
nonpayablefunction setURI(string newURI)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
unfreezeKeys
nonpayablefunction unfreezeKeys(uint256 keyId)
updateOperatorStatus
nonpayablefunction updateOperatorStatus(address operator, bool isAllowed)
events
AccessRegistryUpdated
event AccessRegistryUpdated(address indexed oldAccessRegistry, address indexed newAccessRegistry)
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
KeyExchangeUpdated
event KeyExchangeUpdated(address indexed oldKeyExchange, address indexed newKeyExchange)
KeyFrozen
event KeyFrozen(address indexed admin, uint256 indexed keyId)
KeyUnfrozen
event KeyUnfrozen(address indexed admin, uint256 indexed keyId)
OperatorStatusUpdated
event OperatorStatusUpdated(address operator, bool status)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
RolesUpdated
event RolesUpdated(address indexed user, uint256 indexed roles)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
URI
event URI(string value, uint256 indexed id)
URIUpdated
event URIUpdated(string newURI)
VaultRegistered
event VaultRegistered(address indexed registeredVault)
errors
ArrayLengthMismatch
error ArrayLengthMismatch()
CallerNotExchange
error CallerNotExchange()
CallerNotVault
error CallerNotVault()
CannotLendOutLendedKeys
error CannotLendOutLendedKeys()
CannotLendToSelf
error CannotLendToSelf()
CannotTransferLendedKeys
error CannotTransferLendedKeys()
HasActiveLend
error HasActiveLend()
InvalidAccessType
error InvalidAccessType()
InvalidKeyAmount
error InvalidKeyAmount()
InvalidLendDuration
error InvalidLendDuration()
KeysFrozen
error KeysFrozen()
LendStillActive
error LendStillActive()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NoActiveLend
error NoActiveLend()
NoHandoverRequest
error NoHandoverRequest()
OperatorBlocked
error OperatorBlocked()
Unauthorized
error Unauthorized()
ZeroAddressInvalid
error ZeroAddressInvalid()
ZeroKeyTransfer
error ZeroKeyTransfer()
ZeroLendAmount
error ZeroLendAmount()
creation bytecode
0x60806040523480156200001157600080fd5b5060405162003b0038038062003b0083398101604081905262000034916200019e565b816200004081620000c4565b5060016004556001600160a01b03831615806200006457506001600160a01b038116155b156200008357604051630a64406560e11b815260040160405180910390fd5b6200008e33620000d6565b6200009b83600162000112565b600780546001600160a01b0319166001600160a01b039290921691909117905550620003f69050565b6002620000d282826200032a565b5050565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b638b78c6d8600c52816000526020600c208181541791508181555080600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a35050565b6001600160a01b03811681146200017357600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000199816200015d565b919050565b600080600060608486031215620001b457600080fd5b8351620001c1816200015d565b602085810151919450906001600160401b0380821115620001e157600080fd5b818701915087601f830112620001f657600080fd5b8151818111156200020b576200020b62000176565b604051601f8201601f19908116603f0116810190838211818310171562000236576200023662000176565b816040528281528a868487010111156200024f57600080fd5b600093505b8284101562000273578484018601518185018701529285019262000254565b600086848301015280975050505050505062000292604085016200018c565b90509250925092565b600181811c90821680620002b057607f821691505b602082108103620002d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032557600081815260208120601f850160051c81016020861015620003005750805b601f850160051c820191505b8181101562000321578281556001016200030c565b5050505b505050565b81516001600160401b0381111562000346576200034662000176565b6200035e816200035784546200029b565b84620002d7565b602080601f8311600181146200039657600084156200037d5750858301515b600019600386901b1c1916600185901b17855562000321565b600085815260208120601f198616915b82811015620003c757888601518255948401946001909101908401620003a6565b5085821015620003e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6136fa80620004066000396000f3fe60806040526004361061027c5760003560e01c8063715018a61161014f578063c470db1c116100c1578063e721aafd1161007a578063e721aafd14610854578063e985e9c514610881578063f04e283e146108a1578063f242432a146108b4578063f2fde38b146108d4578063fee81cf4146108e757600080fd5b8063c470db1c146106f5578063d70b56171461070a578063d7533f02146107d6578063d8bbefe9146107f4578063da8fe99214610814578063e6f29b051461083457600080fd5b80638dc92623116101135780638dc926231461062557806394347eec14610645578063948279bb14610665578063a22cb46514610685578063ab3b6e98146106a5578063c3c5a547146106c557600080fd5b8063715018a61461058f578063730ac916146105975780637359e41f146105af57806375ccc132146105dc5780638da5cb5b1461060c57600080fd5b80632de94807116101f3578063514e62fc116101ac578063514e62fc146104d057806354d1f13d1461050757806360d2a0861461050f57806365ce5a721461052f578063666f8ca41461054f57806367ccd1cb1461056f57600080fd5b80632de94807146104065780632eb2c2d6146104395780633de25d4b14610459578063434b71ac146104705780634a4ee7b1146104905780634e1273f4146104a357600080fd5b806313a661ed1161024557806313a661ed1461036b57806315c73a781461038b578063183a4f6e146103a15780631c10893f146103b45780631cd64df4146103c757806325692962146103fe57600080fd5b8062fdd58e1461028157806301ffc9a7146102b457806302fe5305146102e45780630e89341c1461030657806311d6b65614610333575b600080fd5b34801561028d57600080fd5b506102a161029c366004612a5a565b61091a565b6040519081526020015b60405180910390f35b3480156102c057600080fd5b506102d46102cf366004612a9c565b6109b3565b60405190151581526020016102ab565b3480156102f057600080fd5b506103046102ff366004612ab9565b610a03565b005b34801561031257600080fd5b50610326610321366004612b2b565b610a8b565b6040516102ab9190612b94565b34801561033f57600080fd5b50600854610353906001600160a01b031681565b6040516001600160a01b0390911681526020016102ab565b34801561037757600080fd5b506102a1610386366004612c0e565b610ac6565b34801561039757600080fd5b506102a160095481565b6103046103af366004612b2b565b610aef565b6103046103c2366004612a5a565b610afc565b3480156103d357600080fd5b506102d46103e2366004612a5a565b638b78c6d8600c90815260009290925260209091205481161490565b610304610b12565b34801561041257600080fd5b506102a1610421366004612cba565b638b78c6d8600c908152600091909152602090205490565b34801561044557600080fd5b50610304610454366004612dbc565b610b62565b34801561046557600080fd5b506102a16201518081565b34801561047c57600080fd5b5061030461048b366004612a5a565b610d31565b61030461049e366004612a5a565b610de7565b3480156104af57600080fd5b506104c36104be366004612e6a565b610df9565b6040516102ab9190612f72565b3480156104dc57600080fd5b506102d46104eb366004612a5a565b638b78c6d8600c90815260009290925260209091205416151590565b610304610f23565b34801561051b57600080fd5b5061030461052a366004612cba565b610f5f565b34801561053b57600080fd5b5061030461054a366004612b2b565b610ffc565b34801561055b57600080fd5b5061030461056a366004612cba565b611054565b34801561057b57600080fd5b5061030461058a366004612cba565b6110d9565b610304611158565b3480156105a357600080fd5b506102a16301e1338081565b3480156105bb57600080fd5b506105cf6105ca366004612b2b565b61116c565b6040516102ab9190612f85565b3480156105e857600080fd5b506102d46105f7366004612cba565b60036020526000908152604090205460ff1681565b34801561061857600080fd5b50638b78c6d81954610353565b34801561063157600080fd5b50610304610640366004612b2b565b6111a5565b34801561065157600080fd5b50610304610660366004612fcc565b6111f7565b34801561067157600080fd5b5061030461068036600461300a565b611211565b34801561069157600080fd5b506103046106a0366004612fcc565b61128f565b3480156106b157600080fd5b506103046106c036600461303f565b6112a3565b3480156106d157600080fd5b506102d46106e0366004612cba565b600a6020526000908152604090205460ff1681565b34801561070157600080fd5b506102a1606481565b34801561071657600080fd5b5061079b610725366004612a5a565b6040805160608082018352600080835260208084018290529284018190526001600160a01b039586168152600683528381209481529382529282902082519384018352549384168352600160a01b840466ffffffffffffff1690830152600160d81b90920464ffffffffff169181019190915290565b6040805182516001600160a01b0316815260208084015166ffffffffffffff16908201529181015164ffffffffff16908201526060016102ab565b3480156107e257600080fd5b506040516202a30081526020016102ab565b34801561080057600080fd5b5061030461080f366004612a5a565b6115ed565b34801561082057600080fd5b506102a161082f366004613087565b611777565b34801561084057600080fd5b50600754610353906001600160a01b031681565b34801561086057600080fd5b5061087461086f366004612b2b565b6118e7565b6040516102ab91906130df565b34801561088d57600080fd5b506102d461089c366004613146565b6119a7565b6103046108af366004612cba565b6119f7565b3480156108c057600080fd5b506103046108cf366004613174565b611a34565b6103046108e2366004612cba565b611b6a565b3480156108f357600080fd5b506102a1610902366004612cba565b63389a75e1600c908152600091909152602090205490565b60006001600160a01b03831661098a5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806109e457506001600160e01b031982166303a24d0760e21b145b806109ad57506301ffc9a760e01b6001600160e01b03198316146109ad565b6001610a0e81611b91565b610a4d83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bb792505050565b7fe3afa94108b5f5e82e5f6e539d161ff4b5402a85f696c67b9768ec3ae54ce3668383604051610a7e9291906131dd565b60405180910390a1505050565b6060610a9682611bc3565b610a9f83611c57565b604051602001610ab092919061320c565b6040516020818303038152906040529050919050565b6000815160051b5b8015610ae957828101516001901b90911790601f1901610ace565b50919050565b610af93382611c9b565b50565b610b04611cea565b610b0e8282611d05565b5050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b84336001600160a01b03821614610b7c57610b7c33611d50565b610b84611d89565b8251845114610ba65760405163512509d360e11b815260040160405180910390fd5b60075460405163f6322d1160e01b81526001600160a01b038781166004830152600092169063f6322d1190602401602060405180830381865afa158015610bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c15919061323b565b90506000816002811115610c2b57610c2b6130c9565b03610c4957604051630c0bf9b160e11b815260040160405180910390fd5b60005b8551811015610d10576000868281518110610c6957610c69613258565b602002602001015190506000868381518110610c8757610c87613258565b60209081029190910181015160008481526005909252604090912054909150600160a81b900460ff1615610cce5760405163ce9ef84160e01b815260040160405180910390fd5b80600003610cef5760405163311845e360e21b815260040160405180910390fd5b610cfb8a8a8484611de2565b50508080610d0890613284565b915050610c4c565b50610d1e8787878787612018565b50610d296001600455565b505050505050565b6008546001600160a01b03163314610d5c576040516354fb01b560e11b815260040160405180910390fd5b60408051606081018252600080825260208083018281528385018381526001600160a01b0397881684526006835285842096845295909152929020905181549251935164ffffffffff16600160d81b026001600160d81b0366ffffffffffffff95909516600160a01b026001600160d81b031990941691909516179190911791909116919091179055565b610def611cea565b610b0e8282611c9b565b60608151835114610e5e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610981565b6000835167ffffffffffffffff811115610e7a57610e7a612ba7565b604051908082528060200260200182016040528015610ea3578160200160208202803683370190505b50905060005b8451811015610f1b57610eee858281518110610ec757610ec7613258565b6020026020010151858381518110610ee157610ee1613258565b602002602001015161091a565b828281518110610f0057610f00613258565b6020908102919091010152610f1481613284565b9050610ea9565b509392505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610f67611cea565b6001600160a01b038116610f8e57604051630a64406560e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b031983161790925516610fb882600161205d565b816001600160a01b0316816001600160a01b03167f8e405258e88fd705e6e8b14fd0f9f5cd962c7a8b25109f78a79779a1e9e01ec360405160405180910390a35050565b600161100781611b91565b600082815260056020526040808220805460ff60a81b1916600160a81b17905551839133917fe30c09370b27410ba99e95f6f47031055696515561a6d514949d6b5a4c2c83d19190a35050565b600161105f81611b91565b6001600160a01b03821661108657604051630a64406560e11b815260040160405180910390fd5b600780546001600160a01b038481166001600160a01b0319831681179093556040519116919082907fe2594e9ee452725d2160e249bbc8d9c35dfd7e5b66c74f70cc6e0fabe8c8e7af90600090a3505050565b60026110e481611b91565b6001600160a01b03821661110b57604051630a64406560e11b815260040160405180910390fd5b6001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517f8e0930709528779f1112249aac8fcca15dbb9c595db31092c7bc7f954b5679339190a25050565b611160611cea565b61116a60006120c0565b565b604051602081016000835b81835260051b6020169091019060010183811c80611177575050601f198282030160051c8252604052919050565b60016111b081611b91565b600082815260056020526040808220805460ff60a81b1916905551839133917f7ba27bf7257dd27dff60aa2d05dcbe21b5b9e9b0a2b69fe16aacf5032100d4039190a35050565b600161120281611b91565b61120c838361205d565b505050565b6112196120fe565b600082815260056020526040902054600160a81b900460ff16156112505760405163ce9ef84160e01b815260040160405180910390fd5b6000828152600560209081526040808320805460ff60b01b1916600160b01b179055338352600a9091529020805460ff1916905561120c83838361212e565b8161129981611d50565b61120c83836122aa565b6001600160a01b0384166112ca57604051630a64406560e11b815260040160405180910390fd5b600083815260056020526040902054600160a81b900460ff16156113015760405163ce9ef84160e01b815260040160405180910390fd5b60075460405163f6322d1160e01b81526001600160a01b038681166004830152600092169063f6322d1190602401602060405180830381865afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611370919061323b565b90506000816002811115611386576113866130c9565b036113a457604051630c0bf9b160e11b815260040160405180910390fd5b6001600160a01b03851633036113cd57604051632850fbcb60e01b815260040160405180910390fd5b6001600160a01b038581166000908152600660209081526040808320888452909152902054161561141157604051634eba3a3360e01b815260040160405180910390fd5b8260000361143257604051632646090360e01b815260040160405180910390fd5b6201518082108061144657506301e1338082115b15611464576040516309e3592760e21b815260040160405180910390fd5b3360008181526006602090815260408083208884529091528120549091600160a01b90910466ffffffffffffff169061149d908761091a565b6114a7919061329d565b9050808411156114ca57604051630baccef960e41b815260040160405180910390fd5b60006114d684426132b0565b90506040518060600160405280336001600160a01b031681526020018666ffffffffffffff1681526020018264ffffffffff1681525060066000896001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548166ffffffffffffff021916908366ffffffffffffff160217905550604082015181600001601b6101000a81548164ffffffffff021916908364ffffffffff1602179055509050506115e433888888604051806020016040528060008152506122b5565b50505050505050565b600081815260056020526040902054600160a81b900460ff16156116245760405163ce9ef84160e01b815260040160405180910390fd5b6001600160a01b0382811660009081526006602090815260408083208584528252808320815160608101835290549485168152600160a01b850466ffffffffffffff1692810192909252600160d81b90930464ffffffffff169281018390529190036116a35760405163128afd2760e31b815260040160405180910390fd5b42816040015164ffffffffff1611156116cf576040516323446aff60e11b815260040160405180910390fd5b60408051606081018252600080825260208083018281528385018381526001600160a01b038981168552600684528685208986528452868520955186549351925164ffffffffff16600160d81b026001600160d81b0366ffffffffffffff948516600160a01b026001600160d81b03199096169290931691909117939093171691909117909355845185820151855192830190955291815261120c93879387929116906122b5565b60006117816120fe565b83158061178e5750606484115b156117ac5760405163ebaf5d2b60e01b815260040160405180910390fd5b60006009600081546117bd90613284565b91905081905590506040518060a00160405280856001600160a01b031681526020018460028111156117f1576117f16130c9565b815260006020808301829052604080840183905260ff8a1660609094019390935284825260058152919020825181546001600160a01b039091166001600160a01b031982168117835592840151919283916001600160a81b03191617600160a01b836002811115611864576118646130c9565b02179055506040828101518254606085015160809095015160ff16600160b81b0260ff60b81b19951515600160b01b0260ff60b01b19931515600160a81b029390931661ffff60a81b19909216919091179190911793909316929092179055805160208101909152600081526118df908590839088906123df565b949350505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152600082815260056020908152604091829020825160a0810190935280546001600160a01b03811684529091830190600160a01b900460ff16600281111561195b5761195b6130c9565b600281111561196c5761196c6130c9565b8152905460ff600160a81b8204811615156020840152600160b01b8204811615156040840152600160b81b9091041660609091015292915050565b6008546000906001600160a01b038381169116146119ed576001600160a01b0380841660009081526001602090815260408083209386168352929052205460ff166119f0565b60015b9392505050565b6119ff611cea565b63389a75e1600c52806000526020600c208054421115611a2757636f5e88186000526004601cfd5b60009055610af9816120c0565b84336001600160a01b03821614611a4e57611a4e33611d50565b611a56611d89565b60075460405163f6322d1160e01b81526001600160a01b038781166004830152600092169063f6322d1190602401602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac5919061323b565b90506000816002811115611adb57611adb6130c9565b03611af957604051630c0bf9b160e11b815260040160405180910390fd5b600085815260056020526040902054600160a81b900460ff1615611b305760405163ce9ef84160e01b815260040160405180910390fd5b83600003611b515760405163311845e360e21b815260040160405180910390fd5b611b5d87878787611de2565b610d1e87878787876124ea565b611b72611cea565b8060601b611b8857637448fbae6000526004601cfd5b610af9816120c0565b638b78c6d8600c5233600052806020600c205416610af9576382b429006000526004601cfd5b6002610b0e828261333d565b606060028054611bd2906132c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611bfe906132c3565b8015611c4b5780601f10611c2057610100808354040283529160200191611c4b565b820191906000526020600020905b815481529060010190602001808311611c2e57829003601f168201915b50505050509050919050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480611c72575050819003601f19909101908152919050565b638b78c6d8600c52816000526020600c20805482811681189250508181555080600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a35050565b638b78c6d81954331461116a576382b429006000526004601cfd5b638b78c6d8600c52816000526020600c208181541791508181555080600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a35050565b6001600160a01b03811660009081526003602052604090205460ff16610af9576040516330aaa1db60e01b815260040160405180910390fd5b600260045403611ddb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610981565b6002600455565b6001600160a01b03848116600090815260066020908152604080832086845282529182902082516060810184529054938416808252600160a01b850466ffffffffffffff1692820192909252600160d81b90930464ffffffffff1691830191909152156120115780600001516001600160a01b0316846001600160a01b031603611f6557600082826020015166ffffffffffffff16611e81919061329d565b905080600003611f195760408051606081018252600080825260208083018281528385018381526001600160a01b038c81168552600684528685208b865290935294909220925183549251945164ffffffffff16600160d81b026001600160d81b0366ffffffffffffff96909616600160a01b026001600160d81b031990941691909216179190911792909216919091179055611f5f565b6001600160a01b03861660009081526006602090815260408083208784529091529020805466ffffffffffffff60a01b1916600160a01b66ffffffffffffff8416021790555b50612011565b6020810151604051627eeac760e11b81526001600160a01b03871660048201526024810185905260009166ffffffffffffff1690309062fdd58e90604401602060405180830381865afa158015611fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe491906133fd565b611fee919061329d565b905080831115610d2957604051633deceb6b60e01b815260040160405180910390fd5b5050505050565b6001600160a01b038516331480612034575061203485336119a7565b6120505760405162461bcd60e51b815260040161098190613416565b612011858585858561252f565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527f9ba15b3bcc5a36b37ebd32331029867740686189e4ec2f4c9fb0ac95a21fabba910160405180910390a15050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b336000908152600a602052604090205460ff1661116a5760405163edd7338f60e01b815260040160405180910390fd5b6001600160a01b0383166121905760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610981565b33600061219c84612704565b905060006121a984612704565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156122325760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610981565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526115e4565b610b0e33838361274f565b6001600160a01b0384166122db5760405162461bcd60e51b815260040161098190613464565b3360006122e785612704565b905060006122f485612704565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156123375760405162461bcd60e51b8152600401610981906134a9565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906123749084906132b0565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46123d4848a8a8a8a8a61282f565b505050505050505050565b6001600160a01b03841661243f5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610981565b33600061244b85612704565b9050600061245885612704565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061248a9084906132b0565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46115e48360008989898961282f565b6001600160a01b038516331480612506575061250685336119a7565b6125225760405162461bcd60e51b815260040161098190613416565b61201185858585856122b5565b81518351146125915760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610981565b6001600160a01b0384166125b75760405162461bcd60e51b815260040161098190613464565b3360005b845181101561269e5760008582815181106125d8576125d8613258565b6020026020010151905060008583815181106125f6576125f6613258565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156126465760405162461bcd60e51b8152600401610981906134a9565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906126839084906132b0565b925050819055505050508061269790613284565b90506125bb565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126ee9291906134f3565b60405180910390a4610d2981878787878761298a565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061273e5761273e613258565b602090810291909101015292915050565b816001600160a01b0316836001600160a01b0316036127c25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610981565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384163b15610d295760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906128739089908990889088908890600401613521565b6020604051808303816000875af19250505080156128ae575060408051601f3d908101601f191682019092526128ab9181019061355b565b60015b61295a576128ba613578565b806308c379a0036128f357506128ce613594565b806128d957506128f5565b8060405162461bcd60e51b81526004016109819190612b94565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610981565b6001600160e01b0319811663f23a6e6160e01b146115e45760405162461bcd60e51b81526004016109819061361e565b6001600160a01b0384163b15610d295760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906129ce9089908990889088908890600401613666565b6020604051808303816000875af1925050508015612a09575060408051601f3d908101601f19168201909252612a069181019061355b565b60015b612a15576128ba613578565b6001600160e01b0319811663bc197c8160e01b146115e45760405162461bcd60e51b81526004016109819061361e565b6001600160a01b0381168114610af957600080fd5b60008060408385031215612a6d57600080fd5b8235612a7881612a45565b946020939093013593505050565b6001600160e01b031981168114610af957600080fd5b600060208284031215612aae57600080fd5b81356119f081612a86565b60008060208385031215612acc57600080fd5b823567ffffffffffffffff80821115612ae457600080fd5b818501915085601f830112612af857600080fd5b813581811115612b0757600080fd5b866020828501011115612b1957600080fd5b60209290920196919550909350505050565b600060208284031215612b3d57600080fd5b5035919050565b60005b83811015612b5f578181015183820152602001612b47565b50506000910152565b60008151808452612b80816020860160208601612b44565b601f01601f19169290920160200192915050565b6020815260006119f06020830184612b68565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715612be357612be3612ba7565b6040525050565b600067ffffffffffffffff821115612c0457612c04612ba7565b5060051b60200190565b60006020808385031215612c2157600080fd5b823567ffffffffffffffff811115612c3857600080fd5b8301601f81018513612c4957600080fd5b8035612c5481612bea565b604051612c618282612bbd565b82815260059290921b8301840191848101915087831115612c8157600080fd5b928401925b82841015612caf57833560ff81168114612ca05760008081fd5b82529284019290840190612c86565b979650505050505050565b600060208284031215612ccc57600080fd5b81356119f081612a45565b600082601f830112612ce857600080fd5b81356020612cf582612bea565b604051612d028282612bbd565b83815260059390931b8501820192828101915086841115612d2257600080fd5b8286015b84811015612d3d5780358352918301918301612d26565b509695505050505050565b600082601f830112612d5957600080fd5b813567ffffffffffffffff811115612d7357612d73612ba7565b604051612d8a601f8301601f191660200182612bbd565b818152846020838601011115612d9f57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215612dd457600080fd5b8535612ddf81612a45565b94506020860135612def81612a45565b9350604086013567ffffffffffffffff80821115612e0c57600080fd5b612e1889838a01612cd7565b94506060880135915080821115612e2e57600080fd5b612e3a89838a01612cd7565b93506080880135915080821115612e5057600080fd5b50612e5d88828901612d48565b9150509295509295909350565b60008060408385031215612e7d57600080fd5b823567ffffffffffffffff80821115612e9557600080fd5b818501915085601f830112612ea957600080fd5b81356020612eb682612bea565b604051612ec38282612bbd565b83815260059390931b8501820192828101915089841115612ee357600080fd5b948201945b83861015612f0a578535612efb81612a45565b82529482019490820190612ee8565b96505086013592505080821115612f2057600080fd5b50612f2d85828601612cd7565b9150509250929050565b600081518084526020808501945080840160005b83811015612f6757815187529582019590820190600101612f4b565b509495945050505050565b6020815260006119f06020830184612f37565b6020808252825182820181905260009190848201906040850190845b81811015612fc057835160ff1683529284019291840191600101612fa1565b50909695505050505050565b60008060408385031215612fdf57600080fd5b8235612fea81612a45565b915060208301358015158114612fff57600080fd5b809150509250929050565b60008060006060848603121561301f57600080fd5b833561302a81612a45565b95602085013595506040909401359392505050565b6000806000806080858703121561305557600080fd5b843561306081612a45565b966020860135965060408601359560600135945092505050565b60038110610af957600080fd5b60008060006060848603121561309c57600080fd5b8335925060208401356130ae81612a45565b915060408401356130be8161307a565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b81516001600160a01b03168152602082015160a08201906003811061311457634e487b7160e01b600052602160045260246000fd5b8060208401525060408301511515604083015260608301511515606083015260ff608084015116608083015292915050565b6000806040838503121561315957600080fd5b823561316481612a45565b91506020830135612fff81612a45565b600080600080600060a0868803121561318c57600080fd5b853561319781612a45565b945060208601356131a781612a45565b93506040860135925060608601359150608086013567ffffffffffffffff8111156131d157600080fd5b612e5d88828901612d48565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000835161321e818460208801612b44565b835190830190613232818360208801612b44565b01949350505050565b60006020828403121561324d57600080fd5b81516119f08161307a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132965761329661326e565b5060010190565b818103818111156109ad576109ad61326e565b808201808211156109ad576109ad61326e565b600181811c908216806132d757607f821691505b602082108103610ae957634e487b7160e01b600052602260045260246000fd5b601f82111561120c57600081815260208120601f850160051c8101602086101561331e5750805b601f850160051c820191505b81811015610d295782815560010161332a565b815167ffffffffffffffff81111561335757613357612ba7565b61336b8161336584546132c3565b846132f7565b602080601f8311600181146133a057600084156133885750858301515b600019600386901b1c1916600185901b178555610d29565b600085815260208120601f198616915b828110156133cf578886015182559484019460019091019084016133b0565b50858210156133ed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561340f57600080fd5b5051919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006135066040830185612f37565b82810360208401526135188185612f37565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612caf90830184612b68565b60006020828403121561356d57600080fd5b81516119f081612a86565b600060033d11156135915760046000803e5060005160e01c5b90565b600060443d10156135a25790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156135d257505050505090565b82850191508151818111156135ea5750505050505090565b843d87010160208285010111156136045750505050505090565b61361360208286010187612bbd565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061369290830186612f37565b82810360608401526136a48186612f37565b905082810360808401526136b88185612b68565b9897505050505050505056fea264697066735822122030bdacb88708a4b767e183925756b978ac6c948ba53ef2a2ac31b9d247783f5464736f6c634300081300330000000000000000000000003341776eaa92755296604c6840ba32d3aaeca62000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005b0f02f9f25b7502b755f7b1b7e992624d910bc2000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6173736574732e7365676d696e742e696f2f6b6579732f00