27 txs
1.3k calls
constructor
constructor(address registrar_)
functions
allowance
viewfunction allowance(address account, address spender) view returns (uint256 allowance)
authorizationState
viewfunction authorizationState(address authorizer, bytes32 nonce) view returns (bool isNonceUsed)
balanceOf
viewfunction balanceOf(address account_) view returns (uint256 balance_)
CANCEL_AUTHORIZATION_TYPEHASH
viewfunction CANCEL_AUTHORIZATION_TYPEHASH() view returns (bytes32)
currentIndex
viewfunction currentIndex() view returns (uint128 index_)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields_, string name_, string version_, uint256 chainId_, address verifyingContract_, bytes32 salt_, uint256[] extensions_)
isEarning
viewfunction isEarning(address account_) view returns (bool isEarning_)
latestIndex
viewfunction latestIndex() view returns (uint128)
latestUpdateTimestamp
viewfunction latestUpdateTimestamp() view returns (uint40)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address account) view returns (uint256 nonce)
PERMIT_TYPEHASH
viewfunction PERMIT_TYPEHASH() view returns (bytes32)
portal
viewfunction portal() view returns (address)
principalBalanceOf
viewfunction principalBalanceOf(address account_) view returns (uint240 balance_)
principalOfTotalEarningSupply
viewfunction principalOfTotalEarningSupply() view returns (uint112)
RECEIVE_WITH_AUTHORIZATION_TYPEHASH
viewfunction RECEIVE_WITH_AUTHORIZATION_TYPEHASH() view returns (bytes32)
registrar
viewfunction registrar() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalEarningSupply
viewfunction totalEarningSupply() view returns (uint240 totalEarningSupply_)
totalNonEarningSupply
viewfunction totalNonEarningSupply() view returns (uint240)
totalSupply
viewfunction totalSupply() view returns (uint256 totalSupply_)
TRANSFER_WITH_AUTHORIZATION_TYPEHASH
viewfunction TRANSFER_WITH_AUTHORIZATION_TYPEHASH() view returns (bytes32)
approve
nonpayablefunction approve(address spender_, uint256 amount_) returns (bool success_)
burn
nonpayablefunction burn(uint256 amount_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, bytes signature_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
mint
nonpayablefunction mint(address account_, uint256 amount_, uint128 index_)
mint
nonpayablefunction mint(address account_, uint256 amount_)
permit
nonpayablefunction permit(address owner_, address spender_, uint256 value_, uint256 deadline_, bytes signature_)
permit
nonpayablefunction permit(address owner_, address spender_, uint256 value_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes signature_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
startEarning
nonpayablefunction startEarning()
stopEarning
nonpayablefunction stopEarning()
stopEarning
nonpayablefunction stopEarning(address account_)
transfer
nonpayablefunction transfer(address recipient_, uint256 amount_) returns (bool success_)
transferFrom
nonpayablefunction transferFrom(address sender_, address recipient_, uint256 amount_) returns (bool success_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes signature_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
updateIndex
nonpayablefunction updateIndex(uint128 index_)
events
Approval
event Approval(address indexed account, address indexed spender, uint256 amount)
AuthorizationCanceled
event AuthorizationCanceled(address indexed authorizer, bytes32 indexed nonce)
AuthorizationUsed
event AuthorizationUsed(address indexed authorizer, bytes32 indexed nonce)
EIP712DomainChanged
event EIP712DomainChanged()
IndexUpdated
event IndexUpdated(uint128 indexed index)
StartedEarning
event StartedEarning(address indexed account)
StoppedEarning
event StoppedEarning(address indexed account)
Transfer
event Transfer(address indexed sender, address indexed recipient, uint256 amount)
errors
AuthorizationAlreadyUsed
error AuthorizationAlreadyUsed(address authorizer, bytes32 nonce)
AuthorizationExpired
error AuthorizationExpired(uint256 timestamp, uint256 validBefore)
AuthorizationNotYetValid
error AuthorizationNotYetValid(uint256 timestamp, uint256 validAfter)
CallerMustBePayee
error CallerMustBePayee(address caller, address payee)
DecreasingIndex
error DecreasingIndex(uint128 index, uint128 currentIndex)
DivisionByZero
error DivisionByZero()
IndexNotInitialized
error IndexNotInitialized()
InsufficientAllowance
error InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
InsufficientAmount
error InsufficientAmount(uint256 amount)
InsufficientBalance
error InsufficientBalance(address account, uint256 rawBalance, uint256 amount)
InvalidAccountNonce
error InvalidAccountNonce(uint256 nonce, uint256 expectedNonce)
InvalidRecipient
error InvalidRecipient(address recipient)
InvalidSignature
error InvalidSignature()
InvalidSignatureLength
error InvalidSignatureLength()
InvalidSignatureS
error InvalidSignatureS()
InvalidSignatureV
error InvalidSignatureV()
InvalidUInt112
error InvalidUInt112()
InvalidUInt240
error InvalidUInt240()
IsApprovedEarner
error IsApprovedEarner()
NotApprovedEarner
error NotApprovedEarner()
NotPortal
error NotPortal()
OverflowsPrincipalOfTotalSupply
error OverflowsPrincipalOfTotalSupply()
SignatureExpired
error SignatureExpired(uint256 deadline, uint256 timestamp)
SignerMismatch
error SignerMismatch()
ZeroPortal
error ZeroPortal()
ZeroRegistrar
error ZeroRegistrar()
creation bytecode
0x61016080604052346102f65761002b90612a85803803809161002182856102fa565b8339810190610331565b60409081519161003b81846102fa565b600883526704d206279204d5e360c41b602084015261009881519361006083866102fa565b60018552604d60f81b60208601525f80546001600160a81b0319164260801b64ffffffffff60801b161764e8d4a5100017905561036b565b918260c052466080525f5b60208110806102e7575b156100d6575f1981146100c2576001016100a3565b634e487b7160e01b5f52601160045260245ffd5b84906100e181610350565b6100ed855191826102fa565b8181526100f982610350565b602082019290601f19013684375f5b8181106102ae575050906101949291519020845160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352868201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815261018960c0826102fa565b51902060a05261036b565b61010052600660e0526101408190526001600160a01b0316801561029f576020600491835192838092636425666b60e01b82525afa908115610295575f91610266575b506101208190526001600160a01b03161561025757516126cf90816103b68239608051816110c9015260a051816110ef015260c05181818161077301528181610ea70152611116015260e05181610c6901526101005181610699015261012051818181610a260152611544015261014051818181610ce601526118a50152f35b631b973f8d60e11b5f5260045ffd5b610288915060203d60201161028e575b61028081836102fa565b810190610331565b826101d7565b503d610276565b82513d5f823e3d90fd5b6379a6314960e01b5f5260045ffd5b60208110156102d35782518110156102d35780886001921a6020828601015301610108565b634e487b7160e01b5f52603260045260245ffd5b156102d35783811a15156100ad565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761031d57604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126102f657516001600160a01b03811681036102f65790565b6001600160401b03811161031d57601f01601f191660200190565b6040516103976020828180820195805191829101875e81015f838201520301601f1981018352826102fa565b51905190602081106103a7575090565b5f199060200360031b1b169056fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610e8f578063095ea7b314610e6957806318160ddd14610e0757806323b872dd14610d3057806326987b6014610a8d578063281b229d14610d0a5780632b20e39714610cc757806330adf81f14610c8d578063313ce56714610c505780633644e51514610c2e57806340c10f1914610c0a57806342966c6814610b76578063499d108114610b315780634c57a8fa14610b0b578063532992c514610ad857806353d96f2c14610ab2578063578f2aa014610a8d5780635a049a7014610a4a5780636425666b14610a0757806370a08231146109825780637ecebe001461094a5780637f2eecc31461091057806381399be4146108b957806384af270f1461087c57806384b0196e1461075b57806388b7ab63146107315780638a75f238146106d557806395d89b41146106815780639f8495f9146106685780639fd5a6cf1461060b578063a08cb48b146105e0578063a0cc6a68146105a6578063a36e40fc14610519578063a9059cbb146104e8578063ace150a5146104b7578063b7b7289914610465578063c634dfaa14610403578063cf092995146103d3578063d505accf14610380578063d916948714610346578063dd62ed3e146102f2578063e3ee160e146102c2578063e94a010214610279578063ef55bec6146102435763fc387d5a14610208575f80fd5b3461023f57602036600319011261023f576004356001600160801b038116810361023f5761023d9061023861153a565b6116b5565b005b5f80fd5b3461023f5761023d61027461025736611068565b9161026e8486888a8c989e988e9a9e9d9b9d611b4a565b8561188f565b611cbf565b3461023f57604036600319011261023f576001600160a01b0361029a610eef565b165f52600260205260405f206024355f52602052602060ff60405f2054166040519015158152f35b3461023f5761023d6102ed6102d636611068565b9161026e8486888a8c989e988e9a9e9d9b9d611ef7565b611f64565b3461023f57604036600319011261023f5761030b610eef565b6001600160a01b0361031b610f05565b91165f5260036020526001600160a01b0360405f2091165f52602052602060405f2054604051908152f35b3461023f575f36600319011261023f5760206040517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a15974298152f35b3461023f5760e036600319011261023f57610399610eef565b6103a1610f05565b906084359160ff8316830361023f5761023d9260c435926103cd60a43593606435906044359084611d12565b9061188f565b3461023f5761023d6102ed6103e736610fb3565b6103fd828486888a8c989c9d979d9b999b611ef7565b83611bb7565b3461023f57602036600319011261023f576001600160a01b03610424610eef565b165f52600660205260405f205460ff81165f1461045c576001600160701b0360209160081c165b6001600160701b0360405191168152f35b5060205f61044b565b3461023f57606036600319011261023f5761047e610eef565b6024356044359167ffffffffffffffff831161023f576104b26104a861023d943690600401610f6d565b6103fd8484611765565b611834565b3461023f5761023d6102ed6104cb36611019565b906104e2838587898b8d999d9e989e9c9a9c611ef7565b846117bf565b3461023f57604036600319011261023f5761050e610504610eef565b60243590336112de565b602060405160018152f35b3461023f575f36600319011261023f576105323361189b565b1561057e5764e8d4a510006001600160801b035f5416146105565761023d33611dda565b7f5dcd0a37000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdd93dca8000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023f575f36600319011261023f5760206040517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a22678152f35b3461023f5761023d6102746105f436611019565b906104e2838587898b8d999d9e989e9c9a9c611b4a565b3461023f5760a036600319011261023f57610624610eef565b61062c610f05565b6084359167ffffffffffffffff831161023f5761066261065361023d943690600401610f6d565b92606435906044359084611d12565b90611bb7565b3461023f575f36600319011261023f5761023d33611a26565b3461023f575f36600319011261023f576106d16106bd7f00000000000000000000000000000000000000000000000000000000000000006111b8565b604051918291602083526020830190610ecb565b0390f35b3461023f575f36600319011261023f5760206107206001600160701b036005541664e8d4a510006001600160f01b03916001600160701b036001600160801b035f5416911602041690565b6001600160f01b0360405191168152f35b3461023f5761023d61027461074536610fb3565b6103fd828486888a8c989c9d979d9b999b611b4a565b3461023f575f36600319011261023f576108206107977f00000000000000000000000000000000000000000000000000000000000000006111b8565b60405160206107a68183610f1b565b5f82525f36813761082e6040516107be604082610f1b565b600181527f3100000000000000000000000000000000000000000000000000000000000000838201526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e0870190610ecb565b908582036040870152610ecb565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061086557505050500390f35b835185528695509381019392810192600101610856565b3461023f57602036600319011261023f576001600160a01b0361089d610eef565b165f526006602052602060ff60405f2054166040519015158152f35b3461023f57602036600319011261023f576108d2610eef565b6108db8161189b565b6108e85761023d90611a26565b7f8b198077000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023f575f36600319011261023f5760206040517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de88152f35b3461023f57602036600319011261023f576001600160a01b0361096b610eef565b165f526001602052602060405f2054604051908152f35b3461023f57602036600319011261023f576001600160a01b036109a3610eef565b165f526006602052602060405f205460ff81165f146109f6576001600160701b036107209160081c1664e8d4a510006001600160f01b03916001600160701b036001600160801b035f5416911602041690565b60081c6001600160f01b0316610720565b3461023f575f36600319011261023f5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461023f5760a036600319011261023f57610a63610eef565b6024356044359160ff8316830361023f576104b261023d93608435906064359061026e8686611765565b3461023f575f36600319011261023f5760206001600160801b035f5416604051908152f35b3461023f575f36600319011261023f57602064ffffffffff5f5460801c16604051908152f35b3461023f57608036600319011261023f5761023d610af4610eef565b602435906104b26064356044356104e28585611765565b3461023f575f36600319011261023f5760206001600160701b0360055416604051908152f35b3461023f57606036600319011261023f57610b4a610eef565b604435906001600160801b038216820361023f57610b6d61023d9261023861153a565b60243590611594565b3461023f57602036600319011261023f57600435610b9261153a565b610b9b81612376565b5f6040518281527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3335f52600660205260ff60405f2054165f14610bf857610bf2610bed61023d9261207b565b6120bd565b33612237565b610c0461023d9161207b565b336120f1565b3461023f57604036600319011261023f5761023d610c26610eef565b610b6d61153a565b3461023f575f36600319011261023f576020610c486110c6565b604051908152f35b3461023f575f36600319011261023f57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461023f575f36600319011261023f5760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b3461023f575f36600319011261023f5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461023f575f36600319011261023f5760206001600160f01b0360045416604051908152f35b3461023f57606036600319011261023f57610d49610eef565b610d51610f05565b604435906001600160a01b0383165f52600360205260405f206001600160a01b0333165f5260205260405f2054925f198403610d92575b61050e93506112de565b828410610dd357610dce8361050e950333836001600160a01b03165f5260036020526001600160a01b0360405f2091165f5260205260405f2055565b610d88565b82847f192b9e4e000000000000000000000000000000000000000000000000000000005f523360045260245260445260645ffd5b3461023f575f36600319011261023f5760206001600160f01b038060045416610e5f6001600160701b036005541664e8d4a510006001600160f01b03916001600160701b036001600160801b035f5416911602041690565b0116604051908152f35b3461023f57604036600319011261023f5761050e610e85610eef565b6024359033611272565b3461023f575f36600319011261023f576106d16106bd7f00000000000000000000000000000000000000000000000000000000000000006111b8565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361023f57565b602435906001600160a01b038216820361023f57565b90601f8019910116810190811067ffffffffffffffff821117610f3d57604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111610f3d57601f01601f191660200190565b81601f8201121561023f57803590610f8482610f51565b92610f926040519485610f1b565b8284526020838301011161023f57815f926020809301838601378301015290565b60e060031982011261023f576004356001600160a01b038116810361023f57916024356001600160a01b038116810361023f579160443591606435916084359160a4359160c4359067ffffffffffffffff821161023f5761101691600401610f6d565b90565b61010090600319011261023f576004356001600160a01b038116810361023f57906024356001600160a01b038116810361023f579060443590606435906084359060a4359060c4359060e43590565b61012090600319011261023f576004356001600160a01b038116810361023f57906024356001600160a01b038116810361023f579060443590606435906084359060a4359060c43560ff8116810361023f579060e435906101043590565b467f000000000000000000000000000000000000000000000000000000000000000003611111577f000000000000000000000000000000000000000000000000000000000000000090565b61113a7f00000000000000000000000000000000000000000000000000000000000000006111b8565b6020815191012060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a081526111b260c082610f1b565b51902090565b5f5b6020811080611263575b156111ed575f1981146111d9576001016111ba565b634e487b7160e01b5f52601160045260245ffd5b906111f782610f51565b916112056040519384610f1b565b808352601f1961121482610f51565b013660208501375f5b81811061122a5750505090565b602081101561124f57835181101561124f5780836001921a602082870101530161121d565b634e487b7160e01b5f52603260045260245ffd5b1561124f5781811a15156111c4565b919060206001600160a01b03807f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936112d18682896001600160a01b03165f5260036020526001600160a01b0360405f2091165f5260205260405f2055565b60405195865216941692a3565b91906112e98161203e565b6001600160a01b038316916113336001600160a01b0383169182857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020604051858152a361207b565b92805f52600660205260ff60405f20541691805f52600660205260ff60405f20541615158315151461141d575050156113da576001600160801b035f541680156113b2576113b0936113a56113a06113ab935f198164e8d4a510006001600160f01b038a16020101612639565b612657565b90612237565b6122f2565b565b7f23d359a3000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091826113e6916120f1565b6001600160801b035f541680156113b2576113a06114179164e8d4a510006001600160f01b036113b0961602612639565b906121bb565b9392509493505f14611534576001600160801b035f541680156113b2576001600160701b0391611465916113a0916001600160f01b031664e8d4a510000281015f1901612639565b16905b835f5260066020526001600160f01b0360405f205460081c16936001600160f01b0383169485811061151a57506113b09394505f5260066020526114dc60405f206001600160f01b038481835460081c160316610100600160f81b0319610100600160f81b0383549260081b169116179055565b5f5260066020526001600160f01b0360405f209181835460081c160116610100600160f81b0319610100600160f81b0383549260081b169116179055565b859163db42144d60e01b5f5260045260245260445260645ffd5b90611468565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361156c57565b7f3f94bdf3000000000000000000000000000000000000000000000000000000005f5260045ffd5b61159d82612376565b6115a68161203e565b6115e56001600160a01b03821692835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020604051858152a361207b565b6001600160f01b0360045416926001600160f01b038216936001600160f01b0385820111908115611687575b5061165f575f52600660205260ff60405f2054165f1461165457506001600160801b035f541680156113b2576113a06114179164e8d4a510006113b09502612639565b906113b092506122f2565b7f51655895000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160701b038092506116ab6001600160f01b038683600554169401166120bd565b160110155f611611565b5f546001600160801b038082169216918083106117365750817fffffffffffffffffffffff00000000000000000000000000000000000000000074ffffffffff000000000000000000000000000000004260801b16921617175f557fce8d5137687211bba395deb2f8d0635a370c6d4a302be2506a529b0942ce26715f80a2565b827fecb4124f000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b61101691604051906001600160a01b0360208301937f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742985521660408301526060820152606081526117b7608082610f1b565b5190206123aa565b9290916117f89260ff601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851694821c011690612566565b6006821015611820576113b0928261181957611814925061254b565b6123f8565b50506123f8565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b039061184783826124f2565b16805f52600260205260405f20825f5260205260405f20600160ff198254161790557f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d815f80a3565b93916117f89391612566565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040517f8eaa6ac00000000000000000000000000000000000000000000000000000000081527f6561726e6572735f6c6973745f69676e6f7265640000000000000000000000006004820152602081602481855afa9081156119e9575f916119f4575b50159182159261193757505090565b602091925060446001600160a01b039160405194859384927fd7d1c1c00000000000000000000000000000000000000000000000000000000084527f6561726e6572730000000000000000000000000000000000000000000000000060048501521660248301525afa9081156119e9575f916119b1575090565b90506020813d6020116119e1575b816119cc60209383610f1b565b8101031261023f5751801515810361023f5790565b3d91506119bf565b6040513d5f823e3d90fd5b90506020813d602011611a1e575b81611a0f60209383610f1b565b8101031261023f57515f611928565b3d9150611a02565b6001600160a01b0316805f52600660205260405f20805460ff811615611b4557827f9467bac89b535c15fcd73b0e7b12e123a045fd17124952dfa868dfdf5e42d48d5f80a260ff19169055805f5260066020526001600160701b0360405f205460081c16908115611b41576001600160f01b0364e8d4a510006001600160801b035f541684020416905f526006602052611ae08160405f2090610100600160f81b0319610100600160f81b0383549260081b169116179055565b7fffff0000000000000000000000000000000000000000000000000000000000006001600160f01b036004549281841601169116176004556dffffffffffffffffffffffffffff196001600160701b03600554928184160316911617600555565b5050565b505050565b93909261101695926001600160a01b03604051958160208801987fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de88a52166040880152166060860152608085015260a084015260c083015260e082015260e081526117b761010082610f1b565b91611bc28183612606565b60068210156118205781611cb857611bdb91508461254b565b925b6006841015611820578315611cb2575f92611c21611c2f85946040519283916020830195630b135d3f60e11b87526024840152604060448401526064830190610ecb565b03601f198101835282610f1b565b51915afa3d15611cab573d611c4381610f51565b90611c516040519283610f1b565b81523d5f602083013e5b81611c9d575b81611c78575b50611c75576113b0906123f8565b50565b805160208083019350908201919091031261023f5751630b135d3f60e11b145f611c67565b905060208151101590611c61565b6060611c5b565b50505050565b5092611bdd565b9594939291906001600160a01b03811696873303611ce2576113b0969750611f64565b877f1c5939f3000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b939293844211611daa57936001600160a01b0385611d3585856110169899611272565b1692835f52600160205260405f20908154916001830190556001600160a01b036040519460208601967f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988526040870152166060850152608084015260a083015260c082015260c081526117b760e082610f1b565b847ff88f0490000000000000000000000000000000000000000000000000000000005f526004524260245260445ffd5b6001600160a01b0316805f52600660205260405f2080549060ff8216611b455760016001600160f01b0392847f8fbc5add0c3fc76c7a869df537ee9250843681f6bbc2ea9735d40c6dc259414c5f80a260ff19161780915560081c16908115611b41576001600160801b035f541680156113b2576113a0611e629164e8d4a510008502612639565b5f918252600660205260409091208054610100600160f81b0319166effffffffffffffffffffffffffff00600884901b161790556dffffffffffffffffffffffffffff196001600160701b036005549281841601169116176005557fffff0000000000000000000000000000000000000000000000000000000000006001600160f01b03600454928184160316911617600455565b93909261101695926001600160a01b03604051958160208801987f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a22678a52166040880152166060860152608085015260a084015260c083015260e082015260e081526117b761010082610f1b565b9193959490928042111561200f575085421015611fdf576113b0949550611f8b81836124f2565b6001600160a01b038216805f52600260205260405f20825f5260205260405f20600160ff198254161790557f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a55f80a36112de565b857fb3fcd33e000000000000000000000000000000000000000000000000000000005f524260045260245260445ffd5b7f498ff9a2000000000000000000000000000000000000000000000000000000005f524260045260245260445ffd5b6001600160a01b031680156120505750565b7f17858bbe000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160f01b038111612095576001600160f01b031690565b7f2a49c10d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160801b035f54169081156113b257611016916113a0916001600160f01b031664e8d4a510000281015f1901612639565b6001600160a01b0316805f5260066020526001600160f01b0360405f205460081c166001600160f01b038316908181106121a25750505f52600660205261216860405f206001600160f01b038381835460081c160316610100600160f81b0319610100600160f81b0383549260081b169116179055565b7fffff0000000000000000000000000000000000000000000000000000000000006001600160f01b03600454928184160316911617600455565b8263db42144d60e01b5f5260045260245260445260645ffd5b6001600160a01b03165f52600660205261220e60405f206001600160f01b036001600160701b03841681835460081c160116610100600160f81b0319610100600160f81b0383549260081b169116179055565b6dffffffffffffffffffffffffffff196001600160701b03600554928184160116911617600555565b6001600160a01b0316805f5260066020526001600160f01b0360405f205460081c16906001600160701b038316918281106122d95750906122b0915f5260066020526001600160f01b0360405f209181835460081c160316610100600160f81b0319610100600160f81b0383549260081b169116179055565b6dffffffffffffffffffffffffffff196001600160701b03600554928184160316911617600555565b9063db42144d60e01b5f5260045260245260445260645ffd5b6001600160a01b03165f52600660205261233c60405f206001600160f01b038381835460081c160116610100600160f81b0319610100600160f81b0383549260081b169116179055565b7fffff0000000000000000000000000000000000000000000000000000000000006001600160f01b03600454928184160116911617600455565b801561237f5750565b7f77b8dde3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6123b26110c6565b906040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526111b2606282610f1b565b9060068210156118205781156124ee5750600181146124df57600281146124b7576003811461248f57600481146124675760051461243f57638baa579f60e01b5f5260045ffd5b7f10c74b03000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fff551e89000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fbf4bf5b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4be6321b000000000000000000000000000000000000000000000000000000005f5260045ffd5b638baa579f60e01b5f5260045ffd5b9050565b6001600160a01b0316805f52600260205260405f20825f5260205260ff60405f20541661251d575050565b7fd309466d000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6001600160a01b03908116911603612561575f90565b600590565b907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116125fb5760ff1690601b821415806125f0575b6125e5576020935f93608093604051938452868401526040830152606082015282805260015afa156119e9575f516001600160a01b0316806125e157506001905f90565b5f91565b505050506004905f90565b50601c82141561259d565b505050506003905f90565b9060418151036126305761262c91602082015190606060408401519301515f1a90612566565b9091565b50506002905f90565b8115612643570490565b634e487b7160e01b5f52601260045260245ffd5b6001600160701b038111612671576001600160701b031690565b7fca21dbd1000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220ec43bf74a336f78dc0774097414e0ac2c44e8090d020558a12e55b8384108c2c64736f6c634300081a0033000000000000000000000000119fbeedd4f4f4298fb59b720d5654442b81ae2c