0 txs
23 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
contractAddressManager
viewfunction contractAddressManager() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
expectedSigner
viewfunction expectedSigner() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hasVotedFor
viewfunction hasVotedFor(uint256 voter, address targetContract, uint256 targetId) view returns (bool)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
signatureUsed
viewfunction signatureUsed(bytes) view returns (bool)
signatureVerifier
viewfunction signatureVerifier() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
voteCount
viewfunction voteCount() view returns (uint256)
voteIndexFor
viewfunction voteIndexFor(uint256 voter, address targetContract, uint256 targetId) view returns (uint256)
votes
viewfunction votes(uint256) view returns (bool isUpvote, bool isArchived, address targetContract, uint256 voter, uint256 targetId, uint256 createdAt)
votesCountFor
viewfunction votesCountFor(address targetContract, uint256 targetId) view returns (uint256 upvotes, uint256 downvotes)
votesInRangeFor
viewfunction votesInRangeFor(address targetContract, uint256 targetId, uint256 fromIdx, uint256 maxLength) view returns (tuple[] result)
addAdmin
nonpayablefunction addAdmin(address admin)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, address admin, address expectedSigner, address signatureVerifier, address contractAddressManagerAddr)
pause
nonpayablefunction pause()
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
unpause
nonpayablefunction unpause()
updateContractAddressManager
nonpayablefunction updateContractAddressManager(address contractAddressesAddr)
updateExpectedSigner
nonpayablefunction updateExpectedSigner(address signer)
updateOwner
nonpayablefunction updateOwner(address owner)
updateSignatureVerifier
nonpayablefunction updateSignatureVerifier(address sinatureVerifier)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
voteFor
nonpayablefunction voteFor(address targetContract, uint256 targetId, bool isUpvote)
events
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
VoteChanged
event VoteChanged(bool isUnvote, bool isUpvote, uint256 indexed voter, address indexed targetContract, uint256 indexed targetId, uint256 voteId)
Voted
event Voted(bool isUpvote, uint256 indexed voter, address indexed targetContract, uint256 indexed targetId, uint256 voteId)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
NotInitializing
error NotInitializing()
SignatureWasUsed
error SignatureWasUsed()
TargetNotFound
error TargetNotFound(address targetContract, uint256 targetId)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040523461003257610011610037565b604051612d356101c48239608051818181612123015261229e0152612d3590f35b600080fd5b61003f61007e565b610047610115565b565b61005d90610060906001600160a01b031682565b90565b6001600160a01b031690565b61005d90610049565b61005d9061006c565b610086610094565b61008f30610075565b608052565b61004761004761003f565b61005d9060401c60ff1690565b61005d905461009f565b61005d905b6001600160401b031690565b61005d90546100b6565b61005d906100bb906001600160401b031682565b906100f561005d610111926100d1565b82546001600160401b0319166001600160401b03919091161790565b9055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061013f816100ac565b6101b15761014c816100c7565b6001600160401b0391908290811603610163575050565b816101927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2936101ac936100e5565b604051918291826001600160401b03909116815260200190565b0390a1565b63f92ee8a960e01b6000908152600490fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461025257806308473f641461024d5780631459457a146102485780631785f53c14610243578063248a9ca31461023e5780632bdd87ff146102395780632cb3e494146102345780632f2ff15d1461022f57806331547ea61461022a57806336568abe146102255780633f4ba83a146102205780634a8052f41461021b5780634f1ef2861461021657806352d1902d146102115780635667981b1461020c578063571e71e1146102075780635c975abb146102025780635df81330146101fd57806370480275146101f857806375b238fc146101f35780638456cb59146101ee578063880cdc31146101e95780639010d07c146101e457806391d14854146101df578063a217fddf146101da578063a3246ad3146101d5578063a36bf06e146101d0578063ad3cb1cc146101cb578063ade9ae97146101c6578063bb10c829146101c1578063c6384071146101bc578063ca15c873146101b7578063d547741f146101b2578063e58378bb146101ad578063fc7e353f146101a85763fde919f60361026a57610df3565b610db8565b610d62565b610d49565b610d2e565b610d13565b610cd6565b610c07565b610b95565b610acc565b610aa5565b610a32565b610a04565b6109e8565b6109b4565b61099c565b610975565b61095d565b610929565b6107f1565b6107c6565b6106b4565b610699565b610685565b61056b565b610523565b61050a565b6104f1565b610493565b610442565b6103f5565b6103ca565b61038b565b61036f565b610306565b610299565b6001600160e01b031981165b0361026a57565b600080fd5b9050359061027c82610257565b565b9060208282031261026a576102929161026f565b90565b9052565b3461026a576102c66102b46102af36600461027e565b610e0e565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b038116610263565b9050359061027c826102d6565b9060208282031261026a57610292916102e5565b3461026a5761031e6103193660046102f2565b610e9f565b604051005b919060a08382031261026a5761033981846102e5565b9261034782602083016102e5565b9261029261035884604085016102e5565b93608061036882606087016102e5565b94016102e5565b3461026a5761031e610382366004610323565b9392909261110d565b3461026a5761031e61039e3660046102f2565b611150565b80610263565b9050359061027c826103a3565b9060208282031261026a57610292916103a9565b3461026a576102c66103e56103e03660046103b6565b61115f565b6040519182918290815260200190565b3461026a5761031e6104083660046102f2565b6111b3565b600091031261026a57565b610292916008021c6001600160a01b031690565b906102929154610418565b61029260008061042c565b3461026a5761045236600461040d565b6102c661045d610437565b604051918291826001600160a01b03909116815260200190565b919060408382031261026a5761029290602061036882866103a9565b3461026a5761031e6104a6366004610477565b906111d7565b801515610263565b9050359061027c826104ac565b909160608284031261026a576102926104da84846102e5565b9360406104ea82602087016103a9565b94016104b4565b3461026a5761031e6105043660046104c1565b9161148c565b3461026a5761031e61051d366004610477565b90611497565b3461026a5761053336600461040d565b61031e6115bb565b909160608284031261026a5761029261055484846103a9565b93604061056482602087016102e5565b94016103a9565b3461026a576102c66103e561058136600461053b565b916115cd565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176105bf57604052565b610587565b9061027c6105d160405190565b928361059d565b67ffffffffffffffff81116105bf57602090601f01601f19160190565b0190565b90826000939282370152565b9092919261061a610615826105d8565b6105c4565b938185528183011161026a5761027c9160208501906105f9565b9080601f8301121561026a5781602061029293359101610605565b91909160408184031261026a5761066683826102e5565b92602082013567ffffffffffffffff811161026a576102929201610634565b61031e61069336600461064f565b90611620565b3461026a576106a936600461040d565b6102c66103e561166d565b3461026a5761031e6106c73660046102f2565b61169b565b60808183031261026a576106e082826102e5565b926102926106f184602085016103a9565b93606061056482604087016103a9565b8051151582526020808201511515908301526040808201516001600160a01b03169083015261027c919060a090819061073f60608201516060860152565b61074e60808201516080860152565b0151910152565b906105f58160c093610701565b9061078261077b610771845190565b8084529260200190565b9260200190565b9060005b8181106107935750505090565b9091926107ad6107a66001928651610755565b9460200190565b929101610786565b602080825261029292910190610762565b3461026a576102c66107e56107dc3660046106cc565b92919091611730565b604051918291826107b5565b3461026a5761080136600461040d565b6102c66102b4611759565b6102926102926102929290565b906108239061080c565b600052602052604060002090565b610292905b60ff1690565b6102929054610831565b6102929060081c610836565b6102929054610846565b6102929060101c6102ca565b610292905461085c565b6102929081565b6102929054610872565b61088e906037610819565b906108988261083c565b916108a281610852565b916108ac82610868565b916108b960018201610879565b9161029260036108cb60028501610879565b9301610879565b919461091e6109259298979561091760a09661090761027c9a6108fe60c08a019e60008b019015159052565b15156020890152565b6001600160a01b03166040870152565b6060850152565b6080830152565b0152565b3461026a576102c661094461093f3660046103b6565b610883565b9261095496949692919260405190565b968796876108d2565b3461026a5761031e6109703660046102f2565b611794565b3461026a5761098536600461040d565b6102c6600080516020612ce08339815191526103e5565b3461026a576109ac36600461040d565b61031e611800565b3461026a5761031e6109c73660046102f2565b611858565b919060408382031261026a5761029290602061056482866103a9565b3461026a576102c661045d6109fe3660046109cc565b90611861565b3461026a576102c66102b4610a1a366004610477565b906118a2565b610292600061080c565b610292610a20565b3461026a57610a4236600461040d565b6102c66103e5610a2a565b90610a5c61077b610771845190565b9060005b818110610a6d5750505090565b909192610a8c6107a660019286516001600160a01b0316815260200190565b929101610a60565b602080825261029292910190610a4d565b3461026a576102c6610ac0610abb3660046103b6565b6118d8565b60405191829182610a94565b3461026a576102c66102b4610ae236600461053b565b916118ef565b90610af5610615836105d8565b918252565b610b046005610ae8565b640352e302e360dc1b602082015290565b610292610afa565b610292610b15565b610292610b1d565b60005b838110610b405750506000910152565b8181015183820152602001610b30565b610b71610b7a6020936105f593610b65815190565b80835293849260200190565b95869101610b2d565b601f01601f191690565b602080825261029292910190610b50565b3461026a57610ba536600461040d565b6102c6610bb0610b25565b60405191829182610b84565b6102926000600361042c565b610292906102ca906001600160a01b031682565b61029290610bc8565b61029290610bdc565b61029590610be5565b60208101929161027c9190610bee565b3461026a57610c1736600461040d565b6102c6610c22610bbc565b60405191829182610bf7565b9060208282031261026a57813567ffffffffffffffff811161026a576102929201610634565b6105f5610c6c92602092610c66815190565b94859290565b93849101610b2d565b610af56105f59160209493610c54565b610c9a610c9160405190565b92839283610c75565b03902090565b61029291610c85565b610292916008021c610836565b906102929154610ca9565b6000610cd1610292926002610ca0565b610cb6565b3461026a576102c66102b4610cec366004610c2e565b610cc1565b610292916008021c81565b906102929154610cf1565b61029260006036610cfc565b3461026a57610d2336600461040d565b6102c66103e5610d07565b3461026a576102c66103e5610d443660046103b6565b61190c565b3461026a5761031e610d5c366004610477565b9061193e565b3461026a57610d7236600461040d565b6102c6600080516020612ca08339815191526103e5565b919060408382031261026a5761029290602061056482866102e5565b90815260408101929161027c9160200152565b3461026a57610dd1610dcb366004610d89565b90611948565b906102c6610dde60405190565b92839283610da5565b6102926000600161042c565b3461026a57610e0336600461040d565b6102c661045d610de7565b635a05180f60e01b6001600160e01b0319821614908115610e2d575090565b610292915061196a565b61027c90610e57600080516020612ce08339815191526119a4565b6119a4565b610e8c565b906001600160a01b03905b9181191691161790565b90610e81610292610e8892610be5565b8254610e5c565b9055565b610e9861027c91610be5565b6003610e71565b61027c90610e37565b6102929060401c610836565b6102929054610ea8565b610292905b67ffffffffffffffff1690565b6102929054610ebe565b610ec36102926102929290565b9067ffffffffffffffff90610e67565b610ec36102926102929267ffffffffffffffff1690565b90610f1e610292610e8892610ef7565b8254610ee7565b9068ff00000000000000009060401b610e67565b90610f49610292610e8892151590565b8254610f25565b61029590610eda565b60208101929161027c9190610f50565b92939091907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00948592610fab610fa5610fa186610eb4565b1590565b94610ed0565b94600096610fb888610eda565b67ffffffffffffffff881614806110bc575b600197610fe7610fd98a610eda565b9167ffffffffffffffff1690565b149081611094575b155b908161108b575b5061107c5790611025949392918661101c8a6110138b610eda565b9c019b8c610f0e565b61106d576110e4565b61102e57505050565b61105c611068927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d294610f39565b60405191829182610f59565b0390a1565b611077888b610f39565b6110e4565b63f92ee8a960e01b8852600488fd5b15905038610ff8565b9050610ff16110a230610be5565b3b6110b36110af8c61080c565b9190565b14919050610fef565b5085610fca565b9060001990610e67565b906110dd610292610e889261080c565b82546110c3565b906110f194939291611a9d565b6110f9611ab2565b61027c611106600161080c565b60366110cd565b9061027c94939291610f69565b61027c90611135600080516020612ca08339815191526119a4565b61114d90600080516020612ce0833981519152611aba565b50565b61027c9061111a565b90610823565b600161118961029292611170600090565b506000600080516020612cc08339815191525b01611159565b01610879565b61027c906111aa600080516020612ce08339815191526119a4565b61027c90611b2b565b61027c9061118f565b9061027c916111cd610e528261115f565b9061114d91611b34565b9061027c916111bc565b9061027c92916111ef611b83565b6112d5565b9050519061027c826104ac565b919060408382031261026a5761029290602061121d82866111f4565b94016111f4565b6040513d6000823e3d90fd5b6001600160a01b03909116815260408101929161027c9160200152565b610292906102ca565b610292905461124d565b61126a600d610ae8565b6c4554484f535f50524f46494c4560981b602082015290565b610292611260565b610292611283565b9050519061027c826102d6565b9060208282031261026a5761029291611293565b9050519061027c826103a3565b9060208282031261026a57610292916112b4565b91906112e86112e384610be5565b610be5565b6040805163a12c64b560e01b81526004810184905291829060249082905afa801561140b5761131d9160009161145e57501590565b61143f5761135f60206113336112e36003611256565b61133b61128b565b9061134560405190565b9384928391829163d57f7aa360e01b835260048301610b84565b03915afa90811561140b57611380916112e391600091611410575b50610be5565b92602061138c60405190565b63b8861c2360e01b815233600482015294859060249082905afa93841561140b576000946113da575b506113c18282866118ef565b156113d1579061027c9391611f02565b61027c93611d82565b6113fd91945060203d602011611404575b6113f5818361059d565b8101906112c1565b92386113b5565b503d6113eb565b611224565b611432915060203d602011611438575b61142a818361059d565b8101906112a0565b3861137a565b503d611420565b633f2dc18160e11b60009081529061145990846004611230565b036000fd5b611480915060403d604011611485575b611478818361059d565b810190611201565b501590565b503d61146e565b9061027c92916111e1565b906114a1336102ca565b6001600160a01b038216036114b95761114d91611aba565b63334bd91960e11b6000908152600490fd5b6114d56019610ae8565b7f4554484f535f494e544552414354494f4e5f434f4e54524f4c00000000000000602082015290565b6102926114cb565b6102926114fe565b61152860206115206112e36003611256565b61133b611506565b03915afa90811561140b57600091611594575b5061154e335b916001600160a01b031690565b0361155b5761027c6115b3565b63e2517d3f60e01b60009081526114597f261fea28325784de45eba41a3fbb84c4196fbab02ee802566edfe26616ba5afb336004611230565b6115ad915060203d6020116114385761142a818361059d565b3861153b565b61027c612110565b61027c61150e565b9061082390610be5565b60036115f5610292610292956115f06115fb966115e8600090565b5060386115c3565b610819565b01610819565b610879565b9061027c9161160d612118565b9061027c9161161b816121c0565b6121c9565b9061027c91611600565b61029290611636612288565b611664565b6102927f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61080c565b5061029261163b565b610292600061162a565b61027c90611692600080516020612ce08339815191526119a4565b61027c906122e2565b61027c90611677565b906116bf6116b3610771845490565b92600052602060002090565b9060005b8181106116d05750505090565b9091926116f46116ed6001926116e587610879565b815260200190565b9460010190565b9291016116c3565b90610292916116a4565b9061027c6117209261171760405190565b938480926116fc565b038361059d565b61029290611706565b600261174d6102926102929695946115f0611753956115e8606090565b01611727565b91612448565b6102926124f5565b61027c9061177c600080516020612ca08339815191526119a4565b61114d90600080516020612ce0833981519152611b34565b61027c90611761565b6117af60206115206112e36003611256565b03915afa90811561140b576000916117d9575b506117cc33611541565b0361155b5761027c6117f8565b6117f2915060203d6020116114385761142a818361059d565b386117c2565b61027c612580565b61027c61179d565b61027c90611823600080516020612ca08339815191526119a4565b61114d90600080516020612ca083398151915261185261184c611846600061080c565b83611861565b82611aba565b50611b34565b61027c90611808565b9061189d61029261029293611874600090565b5060007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000611183565b612591565b6102929160006118cd6118d3936118b7600090565b5082600080516020612cc0833981519152611183565b016115c3565b61083c565b6118ea61029261029292611874606090565b6125c5565b6118fa9291906115cd565b6119076110af600061080c565b141590565b61191e61029261029292611874600090565b6125d6565b9061027c91611934610e528261115f565b9061114d91611aba565b9061027c91611923565b61195b916115f0610292926115e8600090565b9061029260016108cb84610879565b637965db0b60e01b6001600160e01b0319821614908115611989575090565b61029291506001600160e01b0319166301ffc9a760e01b1490565b61027c9033906125ec565b9061027c949392916119bf61261b565b6119da565b6102ca6102926102929290565b610292906119c4565b9290939160006119e9816119d1565b6001600160a01b0381166001600160a01b03871614908115611a80575b8115611a64575b50611a555750610e98611a40936112e361114d979694611a2c9461265d565b600080516020612ca0833981519152611b34565b50600080516020612ce0833981519152611b34565b63d92e233d60e01b8152600490fd5b6001600160a01b031690506001600160a01b0385161438611a0d565b90506001600160a01b0381166001600160a01b0388161490611a06565b9061027c949392916119af565b61027c61261b565b61027c611aaa565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200090611ae78184612667565b9283611af4575b50505090565b611b0a92611b059161029291611159565b612703565b50388080611aee565b61027c90611b2081612730565b61027c906000610e71565b61027c90611b13565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200090611b61818461274a565b9283611b6d5750505090565b611b0a92611b7e9161029291611159565b6127bb565b611b8b611759565b611b9157565b63d93c066560e01b6000908152600490fd5b634e487b7160e01b600052603260045260246000fd5b8054821015611bdc57611bd3600191600052602060002090565b91020190600090565b611ba3565b9160001960089290920291821b911b610e67565b9190611c06610292610e889361080c565b908354611be1565b90815491600160401b8310156105bf5782611c3191600161027c95018155611bb9565b90611bf5565b634e487b7160e01b600052601160045260246000fd5b6000198114611c5c5760010190565b611c37565b61029260c06105c4565b9060ff90610e67565b90611c84610292610e8892151590565b8254611c6b565b9061ff009060081b610e67565b90611ca8610292610e8892151590565b8254611c8b565b9062010000600160b01b039060101b610e67565b90611cd3610292610e8892610be5565b8254611caf565b61027c91600390611d5c9060a090611d2985611cff611cf98451151590565b82611c74565b611d15611d0f6020850151151590565b82611c98565b60408301516001600160a01b031690611cc3565b611d40611d37606083015190565b600187016110cd565b611d57611d4e608083015190565b600287016110cd565b015190565b91016110cd565b9061027c91611cda565b901515815260408101929161027c9160200152565b7ffeda367d5feb48361501c702cd43bdba989f2c4da53792e4d6cddaaa2fe1484290611db6610292856115f08660386115c3565b611dd5611dc36036610879565b611dd08460038501610819565b6110cd565b611dec60028201611de66036610879565b90611c0e565b8515611ec357611e0e611dfe82610879565b91611e0883611c4d565b906110cd565b505b611e70611e1b611c61565b8615158152600060208201526001600160a01b0385166040820152611e41836060830152565b611e4c866080830152565b611e574260a0830152565b611e6b611e646036610879565b6037610819565b611d63565b611e95611e8f611e89611e836036610879565b9361080c565b94610be5565b9461080c565b94611eab611ea260405190565b92839283611d6d565b0390a461027c611106611ebe6036610879565b611c4d565b600101611ed2611dfe82610879565b50611e10565b8015611c5c576000190190565b9015158152901515602082015260608101929161027c9160400152565b9091927f9b2653b457da2bdb4c85a991d1c58cb963aa8caf3d259bab62d004a348d8196090611f328484876115cd565b94611fd5611fc2611fbc611fb6611f516102928a6115f08b60386115c3565b94611f606102928c6037610819565b958787611f6c8161083c565b15158215151498611f7c81610852565b15611fef5750600090611fb193838314611fda578201611f9e611dfe82610879565b505b01611fac600082611c98565b611c74565b61080c565b96610be5565b9661080c565b96611fcc60405190565b93849384611ee5565b0390a4565b600101611fe9611dfe82610879565b50611fa0565b91505087156120375780611fb19261200860019361083c565b156120295761202361201982610879565b91611e0883611ed8565b50611c98565b820161202361201982610879565b611fb1916120448261083c565b15612084576120729060019061206581611e0861206082610879565b611ed8565b01611e08611ebe82610879565b61207e610fa18261083c565b90611c74565b6120a89060019061209b81611e08611ebe82610879565b01611e0861206082610879565b612072565b6120b56127db565b61027c6120e66000807fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005b01611c74565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110683361045d565b61027c6120ad565b61212130610be5565b7f0000000000000000000000000000000000000000000000000000000000000000906121556001600160a01b038316611541565b14908115612177575b5061216557565b63703e46dd60e11b6000908152600490fd5b90506121946115416121876127fe565b926001600160a01b031690565b14153861215e565b61027c906121b7600080516020612ca08339815191526119a4565b61027c90612730565b61027c9061219c565b906121d66112e383610be5565b9060206121e260405190565b6352d1902d60e01b815292839060049082905afa60009281612267575b50612231575050600161220f5750565b634c9c8ce360e01b60009081526001600160a01b039091166004526024036000fd5b90929161223f61029261163b565b84036122505761027c929350612814565b632a87526960e21b60009081526004859052602490fd5b61228191935060203d602011611404576113f5818361059d565b91386121ff565b61229130610be5565b6122c36001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611541565b0361216557565b61027c906122d781612730565b61027c906001610e71565b61027c906122ca565b67ffffffffffffffff81116105bf5760208091020190565b90610af5610615836122eb565b612318611c61565b906000825260208080808080870160008152016000815201600081520160008152016000905250565b610292612310565b60005b82811061235857505050565b602090612363612341565b818401520161234c565b9061027c61238361237d84612303565b936122eb565b601f190160208401612349565b91908201809211611c5c57565b906123a6825190565b811015611bdc576020809102010190565b9061027c61243860036123c8611c61565b946123db6123d58261083c565b15158752565b6123f06123e782610852565b15156020880152565b61240c6123fc82610868565b6001600160a01b03166040880152565b61242261241b60018301610879565b6060880152565b61118961243160028301610879565b6080880152565b60a0840152565b610292906123b7565b9161245d82606094612458845190565b61288a565b92612468600061080c565b84146124ee57506124788361236d565b938490612485600061080c565b855b8110156124e5576124de612487916124c26124bd60376124b76124b36124ad868d612390565b8b61239d565b5190565b90610819565b61243f565b6124cc828b61239d565b526124d7818a61239d565b5060010190565b9050612485565b50935093505050565b9250505090565b6102927fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330061083c565b612526611b83565b61027c612556600160007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033006120e0565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110683361045d565b61027c61251e565b6102929061080c565b6125bb6125b6610292936125b160006125c0956125ac600090565b500190565b6128e9565b612588565b6119c4565b610bdc565b6060906125d190612972565b905090565b6125e76000610292926125ac600090565b612987565b906125fa610fa182846118a2565b612602575050565b63e2517d3f60e01b600090815291611459916004611230565b612626610fa161299b565b61262c57565b631afcd79f60e31b6000908152600490fd5b9061027c9161264b61261b565b9061265861027c92611b2b565b6122e2565b9061027c9161263e565b600080516020612cc083398151915261268083836118a2565b156126e9576000611fac84826118cd868261269b9701611159565b6126b56126af6126a9339390565b93610be5565b91610be5565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b6126e060405190565b600090a4600190565b505050600090565b6102929081906001600160a01b031681565b9061272b6110af611fb161272660006102929661271e600090565b500194610bdc565b6126f1565b612a29565b6000906127426115416102ca846119d1565b14611a555750565b600080516020612cc0833981519152612766610fa184846118a2565b156126e9576001611fac8460006118cd86826127829701611159565b6127906126af6126a9339390565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d6126e060405190565b906127d66110af611fb161272660006102929661271e600090565b612b03565b6127e6610fa1611759565b6127ec57565b638dfc202b60e01b6000908152600490fd5b610292600061280e61029261163b565b01611256565b9061281e82612b44565b61282782610be5565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b61285160405190565b600090a280516128646110af600061080c565b11156128735761114d91612bd1565b505061027c612b8f565b91908203918211611c5c57565b9091612896600061080c565b821480156128d7575b80156128cd575b6128c0576128b39161287d565b90818111156125d1575090565b505050610292600061080c565b50818110156128a6565b506128e2600061080c565b831461289f565b610292916000612902926128fb600090565b5001611bb9565b90610cfc565b906129176116b3610771845490565b9060005b8181106129285750505090565b90919261293d6116ed6001926116e587610879565b92910161291b565b9061029291612908565b9061027c6117209261296060405190565b93848092612945565b6102929061294f565b600061029291612980606090565b5001612969565b600061029291612995600090565b50015490565b6102927ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610eb4565b9190611c06610292610e889390565b634e487b7160e01b600052603160045260246000fd5b61027c916000916129c4565b80548015612a18576000190190612a15612a0f8383611bb9565b906129e9565b55565b6129d3565b61027c91600091611bf5565b90612a3a6115fb8260018501611159565b612a44600061080c565b81146126e957612aa261029292600092612a9d956111836001978893612a72612a6c8661080c565b8261287d565b88850191612a90612a81845490565b612a8a8961080c565b9061287d565b808303612aa75750505090565b6129f5565b612a1d565b612aca612ad0612ad894612ac1612902611dd09589611bb9565b92839188611bb9565b906129c4565b888801611159565b388080611aee565b90815491600160401b8310156105bf5782612aca91600161027c95018155611bb9565b612b10610fa18383612bf8565b15612b3d57612b3891611dd0906001612b3184612b2d8482612ae0565b5490565b9301611159565b600190565b5050600090565b6000813b612b546110af8361080c565b14612b6f579061027c91612b6961029261163b565b01610e71565b634c9c8ce360e01b81526001600160a01b03919091166004820152602490fd5b6000612b9a8161080c565b3411612ba35750565b63b398979f60e01b8152600490fd5b3d15612bcc57612bc13d610ae8565b903d6000602084013e565b606090565b60008061029293612be0606090565b50602081519101845af4612bf2612bb2565b91612c11565b6118fa9160016115fb92612c0a600090565b5001611159565b90612c1c5750612c70565b815190600091612c2e6110af8461080c565b1480612c5b575b612c3e57505090565b639996b31560e01b82526001600160a01b03166004820152602490fd5b50803b612c6a6110af8461080c565b14612c35565b8051600090612c816110af8361080c565b1115612c905750805190602001fd5b63d6bda27560e01b8152600490fdfeb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122051c05b597dc924f7af8f0ad8c29aecbb196189785ae8c2d0903e36edef8a71fc64736f6c634300081a0033