0 txs
1 call
constructor
No constructor.
functions
brevisProof
viewfunction brevisProof() view returns (address)
claimed
viewfunction claimed(address, address) view returns (uint256)
config
viewfunction config() view returns (address creator, uint64 startTime, uint32 duration)
dataChainId
viewfunction dataChainId() view returns (uint64)
getRewardAmount
viewfunction getRewardAmount(address user, address token) view returns (uint256)
getRewardsLength
viewfunction getRewardsLength() view returns (uint64)
getRoleAccounts
viewfunction getRoleAccounts(bytes32 role) view returns (address[] accounts)
getTokens
viewfunction getTokens() view returns (address[])
gracePeriod
viewfunction gracePeriod() view returns (uint64)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
numRoleAccounts
viewfunction numRoleAccounts(bytes32 role) view returns (uint256)
owner
viewfunction owner() view returns (address)
REWARD_UPDATER_ROLE
viewfunction REWARD_UPDATER_ROLE() view returns (bytes32)
roleAccounts
viewfunction roleAccounts(bytes32 role, uint256) view returns (address accounts)
roles
viewfunction roles(bytes32 role, address account) view returns (bool)
tokenClaimedRewards
viewfunction tokenClaimedRewards(address) view returns (uint256)
tokenCumulativeRewards
viewfunction tokenCumulativeRewards(address) view returns (uint256)
tokens
viewfunction tokens(uint256) view returns (address)
viewTotalRewards
viewfunction viewTotalRewards(address user) view returns (tuple[])
viewUnclaimedRewards
viewfunction viewUnclaimedRewards(address earner) view returns (tuple[])
vkMap
viewfunction vkMap(uint8) view returns (bytes32)
claim
nonpayablefunction claim(address earner)
claimWithRecipient
nonpayablefunction claimWithRecipient(address to)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
grantRoles
nonpayablefunction grantRoles(bytes32 role, address[] accounts)
init
nonpayablefunction init(tuple cfg, address brv, address owner, bytes32[] vks, uint64 dataChainId, address rewardUpdater)
refund
nonpayablefunction refund()
renounceRole
nonpayablefunction renounceRole(bytes32 role)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
revokeRoles
nonpayablefunction revokeRoles(bytes32 role, address[] accounts)
setGracePeriod
nonpayablefunction setGracePeriod(uint64 _gracePeriod)
setVk
nonpayablefunction setVk(uint8 appId, bytes32 _vk)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateRewards
nonpayablefunction updateRewards(bytes proof, bytes appOutput, uint32 batchIndex, uint256 maxNumToProcess)
events
GracePeriodUpdated
event GracePeriodUpdated(uint64 gracePeriod)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProofProcessed
event ProofProcessed(bytes32 indexed proofId, uint32 indexed epoch, uint32 indexed batchIndex)
ProofSegmentProcessed
event ProofSegmentProcessed(bytes32 indexed proofId, uint32 indexed epoch, uint32 indexed batchIndex, uint256 startEarnerIndex, uint256 endEarnerIndex)
RewardsAdded
event RewardsAdded(uint8 indexed appId, uint32 indexed epoch, address indexed user, uint256[] newRewards)
RewardsClaimed
event RewardsClaimed(address indexed earner, uint256[] claimedRewards)
RoleGranted
event RoleGranted(bytes32 role, address account)
RoleRevoked
event RoleRevoked(bytes32 role, address account)
VkUpdated
event VkUpdated(uint8 appId, bytes32 vk)
errors
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StringsInsufficientHexLength
error StringsInsufficientHexLength(uint256 value, uint256 length)
creation bytecode
0x60808060405234606c5760018054336001600160a01b0319821681179092556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3601280546001600160401b03191662ed4e001790556131fb90816100718239f35b5f80fdfe60c06040526004361015610011575f80fd5b5f3560e01c80630a4b0814146117d65780630c9cbf0e146117685780630ec693ea1461171b578063196f0f62146116ac5780631a69d9c8146116725780631e83409a146116505780632f2ff15d146116095780633f823bfa146115045780634c6f94e5146114d25780634f64b2be1461148457806355a5133b146113e4578063590e1ae31461115f5780636d9dce29146108d857806379502c55146108895780637aa927c71461075d5780638bb9c5bf146107405780638da5cb5b1461070d57806391d148541461018f578063984ba1db1461068c578063a06db7dc14610665578063a1b5ff081461063b578063a2c95141146105c7578063aa6ca8081461053d578063b455995e1461051b578063c7f5aaa0146104e9578063d13bc78f146104c2578063d4f3c7cc1461047d578063d547741f14610436578063d7da1dee1461040f578063deb9a3a2146103a0578063e1ed0a8214610316578063ebc4524f146102d1578063f2fde38b146101ea5763f8fc08b91461018f575f80fd5b346101e65760406003193601126101e6576101a86123ca565b6004355f52600260205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b5f80fd5b346101e65760206003193601126101e6576102036123a7565b61022673ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b73ffffffffffffffffffffffffffffffffffffffff81161561024d5761024b90612f75565b005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b346101e65760206003193601126101e65773ffffffffffffffffffffffffffffffffffffffff6102ff6123a7565b165f526011602052602060405f2054604051908152f35b346101e65760206003193601126101e6576004355f52600360205260405f206040519081602082549182815201915f5260205f20905f5b818110610374576103708561036481870382612436565b6040519182918261259c565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161034d565b346101e6576103ae3661248f565b6103d173ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b5f5b815181101561024b578061040973ffffffffffffffffffffffffffffffffffffffff61040160019486612682565b511685612d2e565b016103d3565b346101e6575f6003193601126101e657602067ffffffffffffffff60075416604051908152f35b346101e65760406003193601126101e65761024b6104526123ca565b61047573ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b6004356127b7565b346101e65760206003193601126101e65773ffffffffffffffffffffffffffffffffffffffff6104ab6123a7565b165f526005602052602060405f2054604051908152f35b346101e6575f6003193601126101e657602067ffffffffffffffff600e5416604051908152f35b346101e6575f6003193601126101e657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101e65760206003193601126101e65761024b6105376123a7565b33612afc565b346101e6575f6003193601126101e65760405180602060045491828152019060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f5b81811061059b576103708561036481870382612436565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610584565b346101e65760406003193601126101e6576105e06123a7565b73ffffffffffffffffffffffffffffffffffffffff6106256106006123ca565b9273ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91165f52602052602060405f2054604051908152f35b346101e65760206003193601126101e6576004355f526003602052602060405f2054604051908152f35b346101e6575f6003193601126101e657602067ffffffffffffffff60125416604051908152f35b346101e65760406003193601126101e6577fe4d02ba66d7a5fdd3d11acbb33a5d51c2bda01ff709ec20c1dd337607dc9eed760406106c861258c565b60ff602435916106f173ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b1690815f52600660205280835f205582519182526020820152a1005b346101e6575f6003193601126101e657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101e65760206003193601126101e65761024b336004356127b7565b346101e65760206003193601126101e6576107766123a7565b60045461078281612696565b9173ffffffffffffffffffffffffffffffffffffffff81165f5b8381106107b157604051806103708782612531565b8073ffffffffffffffffffffffffffffffffffffffff6107d26001936123ed565b90549060031b1c166108028573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff82165f5260205261085960405f2054855f52601060205260405f2073ffffffffffffffffffffffffffffffffffffffff84165f5260205260405f205490612603565b604051916108668361241a565b825260208201526108778288612682565b526108828187612682565b500161079c565b346101e6575f6003193601126101e6576060600b546040519073ffffffffffffffffffffffffffffffffffffffff8116825267ffffffffffffffff8160a01c16602083015260e01c6040820152f35b346101e65760c06003193601126101e65760043567ffffffffffffffff81116101e657806004018136039060a06003198301126101e6576024359273ffffffffffffffffffffffffffffffffffffffff84168094036101e6576044359173ffffffffffffffffffffffffffffffffffffffff831683036101e65760643567ffffffffffffffff81116101e657366023820112156101e65780600401359467ffffffffffffffff86116101e6573660248760051b840101116101e6576084359067ffffffffffffffff82168092036101e65760a4359773ffffffffffffffffffffffffffffffffffffffff891696878a036101e65773ffffffffffffffffffffffffffffffffffffffff60015416611101576109f290612f75565b7fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f5573ffffffffffffffffffffffffffffffffffffffff610a3785612f00565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55602485013567ffffffffffffffff811681036101e657600b54604487013563ffffffff811681036101e6577bffffffffffffffff00000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9260e01b169360a01b1691161717600b556064850194610aff8686612f21565b90680100000000000000008211610d6657600c5482600c5580831061107c575b50600c5f5260205f205f915b83831061101a57505050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd608482013592018212156101e6570160048101359067ffffffffffffffff82116101e6576024018160051b360381136101e657680100000000000000008211610d6657600d5482600d55808310610fd6575b50600d5f5260205f205f5b838110610fc25750505050610bc98484612f21565b9690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610c0f610bf989612477565b98610c076040519a8b612436565b808a52612477565b013660208901375f5b610c228686612f21565b9050811015610ca457610c358686612f21565b8291921015610c7757610c4e6001928260061b01612f00565b73ffffffffffffffffffffffffffffffffffffffff610c6d838c612682565b9116905201610c18565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5092509250925f5b8551811015610d935773ffffffffffffffffffffffffffffffffffffffff610cd48288612682565b51166004549068010000000000000000821015610d6657610d00826001610d2c94016004556004612405565b90919073ffffffffffffffffffffffffffffffffffffffff8084549260031b9316831b921b1916179055565b6001810180911115610cac575b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b50855f5b60ff811684811015610ddf576001019060ff8211610d395760ff8092165f5260066020526024611fe08260051b168801013560405f20551660ff8114610d3957600101610d97565b5050837fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600e541617600e55610e2e73ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b5f8281527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd602052604090205460ff16610f64577f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae5f5260036020527f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f391604091610ed9907f2315356c12c7359eb6b832c07282326508cad629b4c0904d8ba501522d5bfccc612d06565b7f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae5f526002602052815f20815f52602052815f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790558151907f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae82526020820152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c72656164792068617320726f6c65000000000000000000000000000000006044820152fd5b600190602084359401938184015501610bb4565b600d5f527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59081019083015b81811061100f5750610ba9565b5f8155600101611002565b600260408273ffffffffffffffffffffffffffffffffffffffff61103f600195612f00565b167fffffffffffffffffffffffff000000000000000000000000000000000000000086541617855560208101358486015501920192019190610b2b565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103610d39577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d3957600c5f5260205f209060011b8101908360011b015b8181106110f05750610b1f565b5f80825560018201556002016110e3565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6f776e657220616c7265616479207365740000000000000000000000000000006044820152fd5b346101e6575f6003193601126101e65760405160a0810181811067ffffffffffffffff821117610d6657604052600b5473ffffffffffffffffffffffffffffffffffffffff81168252602082019067ffffffffffffffff8160a01c168252604083019060e01c8152600c54916111d483612477565b926111e26040519485612436565b808452600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7602086015b8383106113a157878767ffffffffffffffff61125b6112508a63ffffffff848c6060890197885261124061270e565b60808a0152511691511690612758565b826012541690612758565b16421115611343575f5b8151805182101561024b5761128f8273ffffffffffffffffffffffffffffffffffffffff92612682565b5151169073ffffffffffffffffffffffffffffffffffffffff84511691604051907f70a08231000000000000000000000000000000000000000000000000000000008252306004830152602082602481845afa918215611338575f92611304575b50906001936112fe92612e21565b01611265565b91506020823d8211611330575b8161131e60209383612436565b810103126101e65790519060016112f0565b3d9150611311565b6040513d5f823e3d90fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152fd5b600260206001926040516113b48161241a565b73ffffffffffffffffffffffffffffffffffffffff86541681528486015483820152815201920192019190611211565b346101e65760206003193601126101e65760043567ffffffffffffffff81168091036101e65760207f70270fb8dd97868919b2c758596ceef84c7db4f21790f2619ca490067359ec969161145173ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006012541617601255604051908152a1005b346101e65760206003193601126101e6576004356004548110156101e65773ffffffffffffffffffffffffffffffffffffffff6114c26020926123ed565b90549060031b1c16604051908152f35b346101e65760206003193601126101e65760ff6114ed61258c565b165f526006602052602060405f2054604051908152f35b346101e65760206003193601126101e65761151d6123a7565b60045461152981612696565b915f5b82811061154157604051806103708682612531565b8073ffffffffffffffffffffffffffffffffffffffff6115626001936123ed565b90549060031b1c1673ffffffffffffffffffffffffffffffffffffffff611588836123ed565b90549060031b1c1673ffffffffffffffffffffffffffffffffffffffff6115cd8673ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91165f5260205260405f2054604051916115e68361241a565b825260208201526115f78287612682565b526116028186612682565b500161152c565b346101e65760406003193601126101e65761024b6116256123ca565b61164873ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b600435612d2e565b346101e65760206003193601126101e65761024b61166c6123a7565b80612afc565b346101e6575f6003193601126101e65760206040517f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae8152f35b346101e6576116ba3661248f565b6116dd73ffffffffffffffffffffffffffffffffffffffff60015416331461261d565b5f5b815181101561024b578061171573ffffffffffffffffffffffffffffffffffffffff61170d60019486612682565b5116856127b7565b016116df565b346101e65760406003193601126101e6576024356004355f52600360205260405f209081548110156101e6576114c273ffffffffffffffffffffffffffffffffffffffff91602093612405565b346101e65760406003193601126101e6576117816123a7565b73ffffffffffffffffffffffffffffffffffffffff61179e6123ca565b91165f52601060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b346101e65760806003193601126101e65760043567ffffffffffffffff81116101e657611807903690600401612379565b9060243567ffffffffffffffff81116101e657611828903690600401612379565b9260443563ffffffff81168091036101e657335f9081527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd6020526040902054606435929060ff161561231b578515610c7757833560f81c9460608267ffffffffffffffff600e5416885f52600660205260405f2054935f606473ffffffffffffffffffffffffffffffffffffffff825416937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040519a8b98899788957fe04409530000000000000000000000000000000000000000000000000000000087526004870152604060248701528160448701528686013785858286010152011681010301925af18015611338575f6080525f925f916122d7575b50036122795761195386612fe0565b6119606040519182612436565b868152602081019036888701116101e657878683375f602089830101525190200361221b576080515f52600a60205260405f205494806005116101e6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb90600185013560e01c60a0520191600d547f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103610d3957611a059060031b84612603565b611a0d61277a565b9081156121ee570490611a208783612603565b8180821091180280821461219057611a39911887612610565b955f198701968711610d395786905f611a5061270e565b985f5b8a51811015611c9b57611a66818c612682565b518160051b9082820460201483151715610d395760208201808311610d39578a818f8e94838895886005890192611a9c936125eb565b611aa59161301a565b1493611ab091612682565b51611aba90613036565b94604051948560208101977f696e76616c696420657874726120646174612c2077616e742000000000000000895280516020819201603984015e8101603981015f9052036039017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752611b309087612436565b60405180976020820197518091895e8101602081017f2c20676f742000000000000000000000000000000000000000000000000000009052036020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe681018852600601611b9e9088612436565b60050192611bab936125eb565b611bb49161301a565b611bbd90613036565b916040519283916020830195518091875e820160208101915f83528051926020849201905e016020015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352611c199083612436565b15611c28575050600101611a53565b6044907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040519485937f08c379a0000000000000000000000000000000000000000000000000000000008552602060048601525180918160248701528686015e5f85828601015201168101030190fd5b5087878a60045493611cac85612a74565b93825f52600f60205260405f2063ffffffff60a051165f5260205273ffffffffffffffffffffffffffffffffffffffff60405f20541693885b83811115611e86575b505050505f52600f60205260405f2063ffffffff60a051165f5260205273ffffffffffffffffffffffffffffffffffffffff60405f2091167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555f5b828110611e0457505050611df1575b6001820190818311610d395784916080515f52600a60205260405f205560405190815282602082015260a051907faa2e99aa1426572c50138d9cb252ab086ac0cf2ed651a30b81fdcdd7d91fb33e604060805192a45f198201918211610d395714611dc557005b60a0516080517f90130bf22f1bea2132db4202b9b0ae35e2fc55b2439f38d0b50d65dc31bbb8485f80a4005b90505f198201828111610d395790611d5e565b611e0e8183612682565b5173ffffffffffffffffffffffffffffffffffffffff611e2d836123ed565b90549060031b1c165f526005602052611e4b60405f20918254612610565b90556001810180911115611d4f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b611e8e61277a565b9581870296808804831490151715610d3957601487018711610d3957611ebc601488018885600588016125eb565b90357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116916014811061215b575b505060601c9081156121465773ffffffffffffffffffffffffffffffffffffffff82911610156120e8578096611f208a612a74565b905f5b8b8110611f72575050867fa1c1d72e52ad78c09577d70a91c799cef71f83af3699214c4d1f323a611aa8ab60405180611f5f60a0519582612ac3565b0390a45f198114610d3957600101611ce5565b601482018211610d39577f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103610d3957611fb58160041b60148401612610565b906010820191828111610d3957600192611fd3918960058c016125eb565b90357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811691601081106120b3575b505060801c73ffffffffffffffffffffffffffffffffffffffff612025836123ed565b90549060031b1c1673ffffffffffffffffffffffffffffffffffffffff61206a8873ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91165f5260205260405f20612080828254612610565b90558c6120a18361209b846120958386612682565b51612610565b92612682565b526120ac8286612682565b5201611f23565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009250829060100360031b1b16165f80612002565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6561726e657220616464726573736573206e6f7420736f7274656400000000006044820152fd5b96505050505050935060019389808080611cee565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009250829060140360031b1b16168f80611eeb565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6e6f206561726e65727320746f2070726f6365737300000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642063697263756974206f7574707574000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f766b48617368206d69736d6174636800000000000000000000000000000000006044820152fd5b9250506060823d606011612313575b816122f360609383612436565b810103126101e65781519160406020820151910151926080529188611944565b3d91506122e6565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e617574686f72697a656420726f6c650000000000000000000000000000006044820152fd5b9181601f840112156101e65782359167ffffffffffffffff83116101e657602083818601950101116101e657565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e657565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101e657565b600454811015610c775760045f5260205f2001905f90565b8054821015610c77575f5260205f2001905f90565b6040810190811067ffffffffffffffff821117610d6657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610d6657604052565b67ffffffffffffffff8111610d665760051b60200190565b9060406003198301126101e657600435916024359067ffffffffffffffff82116101e657806023830112156101e6578160040135906124cd82612477565b926124db6040519485612436565b8284526024602085019360051b8201019182116101e657602401915b8183106125045750505090565b823573ffffffffffffffffffffffffffffffffffffffff811681036101e6578152602092830192016124f7565b60206040818301928281528451809452019201905f5b8181106125545750505090565b8251805173ffffffffffffffffffffffffffffffffffffffff1685526020908101518186015260409094019390920191600101612547565b6004359060ff821682036101e657565b60206040818301928281528451809452019201905f5b8181106125bf5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016125b2565b909392938483116101e65784116101e6578101920390565b91908203918211610d3957565b91908201809211610d3957565b1561262457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b8051821015610c775760209160051b010190565b906126a082612477565b6126ad6040519182612436565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06126db8294612477565b01905f5b8281106126eb57505050565b6020906040516126fa8161241a565b5f81525f83820152828285010152016126df565b60405190600d548083528260208101600d5f5260205f20925f5b81811061273f57505061273d92500383612436565b565b8454835260019485019487945060209093019201612728565b9067ffffffffffffffff8091169116019067ffffffffffffffff8211610d3957565b6004547f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103610d395760041b60140180601411610d395790565b90815f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff82165f5260205260ff60405f20541615612a1657815f52600360205260405f20908154925f198401938411610d39575f5b83548110156129b85773ffffffffffffffffffffffffffffffffffffffff6128328286612405565b90549060031b1c1673ffffffffffffffffffffffffffffffffffffffff84161461285e5760010161280a565b848195929394951061297d575b50508254928315612950575f197f155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a529401906128a68282612405565b73ffffffffffffffffffffffffffffffffffffffff82549160031b1b1916905555805f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905561294b6040519283928390929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b0390a1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b610d0073ffffffffffffffffffffffffffffffffffffffff6129a26129b19488612405565b90549060031b1c169186612405565b5f8061286b565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f726f6c65206163636f756e74206e6f7420666f756e64000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f742068617320726f6c6500000000000000000000000000000000000000006044820152fd5b90612a7e82612477565b612a8b6040519182612436565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ab98294612477565b0190602036910137565b60206040818301928281528451809452019201905f5b818110612ae65750505090565b8251845260209384019390920191600101612ad9565b919091612b0a600454612a74565b925f925f5b600454811015612c515773ffffffffffffffffffffffffffffffffffffffff612b37826123ed565b90549060031b1c16612b678573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff82165f5260205260405f20549073ffffffffffffffffffffffffffffffffffffffff861691825f52601060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f52602052612bd760405f205482612603565b925f52601060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f205581612c20575b5090600191612c198289612682565b5201612b0f565b819650612c31600193928683612e21565b5f52601160205260405f20612c47878254612610565b9055909485612c0a565b509392905015612ca85773ffffffffffffffffffffffffffffffffffffffff7fd8fc0975685b888fec33fc16db035e873744ad892ae29f5839444169f79e7ee791612ca3604051928392169482612ac3565b0390a2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f20756e636c61696d656420726577617264730000000000000000000000006044820152fd5b9081549168010000000000000000831015610d665782610d0091600161273d95018155612405565b90815f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff82165f5260205260ff60405f205416610f6457817f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3925f526003602052612d9a8260405f20612d06565b805f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905561294b6040519283928390929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b916020915f916040519073ffffffffffffffffffffffffffffffffffffffff858301937fa9059cbb000000000000000000000000000000000000000000000000000000008552166024830152604482015260448152612e81606482612436565b519082855af115611338575f513d612ef7575073ffffffffffffffffffffffffffffffffffffffff81163b155b612eb55750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612eae565b3573ffffffffffffffffffffffffffffffffffffffff811681036101e65790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101e6570180359067ffffffffffffffff82116101e657602001918160061b360383136101e657565b73ffffffffffffffffffffffffffffffffffffffff80600154921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b67ffffffffffffffff8111610d6657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b359060208110613028575090565b5f199060200360031b1b1690565b60016fffffffffffffffffffffffffffffffff821160071b67ffffffffffffffff83821c1160061b1763ffffffff83821c1160051b1761ffff83821c1160041b1760ff83821c119060031c1701818160011b927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d39576002840193848111610d39576130e06130ca86612fe0565b956130d86040519788612436565b808752612fe0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602087019101368237855115610c775760309053845160011015610c77576078602186015360018101809111610d39575b60018111613172575061314457505090565b7fe22e27eb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b90600f81166010811015610c77578551831015610c77577f3031323334353637383961626364656600000000000000000000000000000000901a8583016020015360041c908015610d39575f190161313256fea2646970667358221220b62f3f96f2404923115577618538f0650fc26059f07d45b3c164c4d825833dc064736f6c634300081d0033