UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

1,552 lines 108 kB
{ "_format": "hh-sol-artifact-1", "contractName": "GrantsManager", "sourceName": "contracts/GrantsManager.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "CallerIsNotTheGrantReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "GrantAlreadyCompleted", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "GrantAlreadyRejected", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "availableFunds", "type": "uint256" }, { "internalType": "uint256", "name": "requiredFunds", "type": "uint256" } ], "name": "InsufficientFunds", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "InvalidFunctionSelector", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "InvalidMilestoneIndex", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "provided", "type": "uint256" }, { "internalType": "uint256", "name": "required", "type": "uint256" } ], "name": "InvalidNumberOfMilestones", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "InvalidTarget", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneAlreadyApproved", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneAlreadyClaimed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneAmountZero", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "claimedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "name": "MilestoneClaimedAmountExceedsTotalAmount", "type": "error" }, { "inputs": [], "name": "MilestoneDetailsMetadataURIEmpty", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneNotApprovedByAdmin", "type": "error" }, { "inputs": [], "name": "MilestoneProposerZeroAddress", "type": "error" }, { "inputs": [ { "internalType": "enum IGrantsManager.MilestoneState", "name": "status", "type": "uint8" } ], "name": "MilestoneStateNotPending", "type": "error" }, { "inputs": [], "name": "MilestoneTotalAmountZero", "type": "error" }, { "inputs": [], "name": "NotAuthorized", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "PreviousMilestoneNotApproved", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalNotExecuted", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "GrantCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "newGrantsReceiver", "type": "address" } ], "name": "GrantsReceiverUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MilestoneClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "newMilestoneMetadataURI", "type": "string" } ], "name": "MilestoneMetadataURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MilestoneRejectedAndFundsReturnedToTreasury", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "MilestoneValidated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "proposer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "grantsReceiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "metadataURI", "type": "string" } ], "name": "MilestonesCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GOVERNANCE_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GRANTS_APPROVER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GRANTS_REJECTOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" }, { "internalType": "string", "name": "reason", "type": "string" } ], "name": "approveMilestoneWithReason", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "approveMilestones", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "claimMilestone", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "metadataURI", "type": "string" }, { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "address", "name": "proposer", "type": "address" }, { "internalType": "address", "name": "grantsReceiver", "type": "address" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" } ], "name": "createMilestones", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getB3trContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGovernorContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getGrantProposal", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "claimedAmount", "type": "uint256" }, { "internalType": "address", "name": "proposer", "type": "address" }, { "internalType": "address", "name": "grantsReceiver", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isClaimed", "type": "bool" }, { "internalType": "bool", "name": "isApproved", "type": "bool" }, { "internalType": "bool", "name": "isRejected", "type": "bool" }, { "internalType": "string", "name": "reason", "type": "string" } ], "internalType": "struct IGrantsManager.Milestone[]", "name": "milestones", "type": "tuple[]" }, { "internalType": "string", "name": "metadataURI", "type": "string" } ], "internalType": "struct IGrantsManager.GrantProposal", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getGrantsReceiverAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "getMilestone", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isClaimed", "type": "bool" }, { "internalType": "bool", "name": "isApproved", "type": "bool" }, { "internalType": "bool", "name": "isRejected", "type": "bool" }, { "internalType": "string", "name": "reason", "type": "string" } ], "internalType": "struct IGrantsManager.Milestone", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getMilestoneMetadataURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "getMilestones", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isClaimed", "type": "bool" }, { "internalType": "bool", "name": "isApproved", "type": "bool" }, { "internalType": "bool", "name": "isRejected", "type": "bool" }, { "internalType": "string", "name": "reason", "type": "string" } ], "internalType": "struct IGrantsManager.Milestone[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMinimumMilestoneCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "milestoneId", "type": "uint256" } ], "name": "getTotalAmountForMilestones", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTreasuryContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "grantState", "outputs": [ { "internalType": "enum IGrantsManager.GrantState", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_governor", "type": "address" }, { "internalType": "address", "name": "_treasury", "type": "address" }, { "internalType": "address", "name": "defaultAdmin", "type": "address" }, { "internalType": "address", "name": "_b3tr", "type": "address" }, { "internalType": "uint256", "name": "_minimumMilestoneCount", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "isClaimable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "isGrantCompleted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "isGrantInDevelopment", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "isGrantRejected", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" } ], "name": "milestoneState", "outputs": [ { "internalType": "enum IGrantsManager.MilestoneState", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "rejectMilestones", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_b3tr", "type": "address" } ], "name": "setB3trContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_governor", "type": "address" } ], "name": "setGovernorContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minimumMilestoneCount", "type": "uint256" } ], "name": "setMinimumMilestoneCount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_treasury", "type": "address" } ], "name": "setTreasuryContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "address", "name": "newGrantsReceiver", "type": "address" } ], "name": "updateGrantsReceiver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "string", "name": "newMilestoneMetadataURI", "type": "string" } ], "name": "updateMilestoneMetadataURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161487f62000104600039600081816132d1015281816132fa0152613444015261487f6000f3fe6080604052600436106102175760003560e01c806219cce61461021c578063012947641461024757806301ffc9a71461026a57806306c498221461029a5780631ed65110146102bc57806321afd1f6146102dc578063248a9ca3146102fe57806324ad94cd1461031e57806326c74fc31461034b5780632f2ff15d1461036057806336568abe146103805780633f36cd7f146103a05780633f4ba83a146103c257806342c549c0146103d75780634f1ef2861461040457806352d1902d1461041757806354b90b7b1461042c57806354fd4d501461044c5780635ade3874146104605780635c975abb14610480578063767b1602146104955780637da17bf3146104b5578063808860a5146104d55780638456cb59146104f55780638ed9895c1461050a57806391d14854146105375780639b15408714610557578063a217fddf14610577578063ad3cb1cc1461058c578063b2a2eef9146105ca578063b3396778146105ea578063bfda4e7c1461060a578063c1a45a6a14610637578063c224938914610657578063c266aef714610677578063c42433b414610697578063c4ec8f98146106b7578063cff28c70146106cc578063d547741f146106ec578063da104fac1461070c578063e03d759b1461072c578063e63ab1e91461074c578063e9af5d1b1461076e578063f23e227b1461079b578063f36c8f5c146107bb578063f7013ef6146107dd578063f72c0d8b146107fd575b600080fd5b34801561022857600080fd5b5061023161081f565b60405161023e9190613ed6565b60405180910390f35b34801561025357600080fd5b5061025c61083d565b60405190815260200161023e565b34801561027657600080fd5b5061028a610285366004613eea565b610852565b604051901515815260200161023e565b3480156102a657600080fd5b506102ba6102b5366004613f29565b610889565b005b3480156102c857600080fd5b506102ba6102d7366004613f29565b6108c4565b3480156102e857600080fd5b5061025c60008051602061476a83398151915281565b34801561030a57600080fd5b5061025c610319366004613f46565b6108ff565b34801561032a57600080fd5b5061033e610339366004613f46565b61091f565b60405161023e9190613ff2565b34801561035757600080fd5b50610231610b96565b34801561036c57600080fd5b506102ba61037b3660046140b7565b610bb4565b34801561038c57600080fd5b506102ba61039b3660046140b7565b610bd6565b3480156103ac57600080fd5b5061025c60008051602061482a83398151915281565b3480156103ce57600080fd5b506102ba610c0e565b3480156103e357600080fd5b506103f76103f2366004613f46565b610c7a565b60405161023e91906140e7565b6102ba6104123660046141fe565b610dc6565b34801561042357600080fd5b5061025c610de1565b34801561043857600080fd5b506102ba610447366004613f29565b610dfe565b34801561045857600080fd5b50600361025c565b34801561046c57600080fd5b5061025c61047b366004613f46565b610e39565b34801561048c57600080fd5b5061028a610e44565b3480156104a157600080fd5b506102ba6104b036600461424d565b610e59565b3480156104c157600080fd5b5061028a6104d0366004613f46565b610fd1565b3480156104e157600080fd5b506102ba6104f036600461426f565b611254565b34801561050157600080fd5b506102ba6117e5565b34801561051657600080fd5b5061052a61052536600461424d565b61184d565b60405161023e9190614384565b34801561054357600080fd5b5061028a6105523660046140b7565b6119ae565b34801561056357600080fd5b5061028a610572366004613f46565b6119e4565b34801561058357600080fd5b5061025c600081565b34801561059857600080fd5b506105bd604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161023e9190614397565b3480156105d657600080fd5b506102ba6105e5366004613f46565b611d43565b3480156105f657600080fd5b506102ba6106053660046143aa565b611d63565b34801561061657600080fd5b5061062a610625366004613f46565b611efc565b60405161023e919061440f565b34801561064357600080fd5b5061028a61065236600461424d565b611ff1565b34801561066357600080fd5b5061028a610672366004613f46565b612018565b34801561068357600080fd5b506102ba61069236600461424d565b61237c565b3480156106a357600080fd5b506102ba6106b2366004614429565b6127f6565b3480156106c357600080fd5b506102316128e9565b3480156106d857600080fd5b506105bd6106e7366004613f46565b612907565b3480156106f857600080fd5b506102ba6107073660046140b7565b6129b9565b34801561071857600080fd5b50610231610727366004613f46565b6129d5565b34801561073857600080fd5b506102ba6107473660046140b7565b6129fe565b34801561075857600080fd5b5061025c60008051602061480a83398151915281565b34801561077a57600080fd5b5061078e61078936600461424d565b612ae5565b60405161023e9190614459565b3480156107a757600080fd5b506102ba6107b6366004613f46565b612af8565b3480156107c757600080fd5b5061025c60008051602061478a83398151915281565b3480156107e957600080fd5b506102ba6107f836600461446d565b612dbd565b34801561080957600080fd5b5061025c6000805160206147ca83398151915281565b60008061082a613101565b600101546001600160a01b031692915050565b600080610848613101565b6004015492915050565b60006001600160e01b03198216637965db0b60e01b148061088357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061089481613125565b600061089e613101565b60010180546001600160a01b0319166001600160a01b0394909416939093179092555050565b60006108cf81613125565b60006108d9613101565b60020180546001600160a01b0319166001600160a01b0394909416939093179092555050565b60008061090a613132565b60009384526020525050604090206001015490565b6109716040518060e0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001606081525090565b600061097b613101565b600084815260208281526040808320815160e0810183528154815260018201548185015260028201548184015260038201546001600160a01b03908116606083015260048301541660808201526005820180548451818702810187019095528085529697509095919460a087019491929184015b82821015610af45760008481526020908190206040805160a0810182526003860290920180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190610a63906144d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8f906144d1565b8015610adc5780601f10610ab157610100808354040283529160200191610adc565b820191906000526020600020905b815481529060010190602001808311610abf57829003601f168201915b505050505081525050815260200190600101906109ef565b505050508152602001600682018054610b0c906144d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906144d1565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050505081525050915050919050565b600080610ba1613101565b600201546001600160a01b031692915050565b610bbd826108ff565b610bc681613125565b610bd08383613156565b50505050565b6001600160a01b0381163314610bff5760405163334bd91960e11b815260040160405180910390fd5b610c0982826131f7565b505050565b60008051602061480a8339815191526000610c27613101565b9050610c3382336119ae565b80610c515750610c5160008051602061478a833981519152336119ae565b610c6e5760405163ea8e4eb560e01b815260040160405180910390fd5b610c7661326f565b5050565b60606000610c86613101565b600084815260208281526040808320600501805482518185028101850190935280835294955090939092909184015b82821015610dba5760008481526020908190206040805160a0810182526003860290920180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190610d29906144d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d55906144d1565b8015610da25780601f10610d7757610100808354040283529160200191610da2565b820191906000526020600020905b815481529060010190602001808311610d8557829003601f168201915b50505050508152505081526020019060010190610cb5565b50505050915050919050565b610dce6132c6565b610dd78261336d565b610c768282613385565b6000610deb613439565b506000805160206147ea83398151915290565b6000610e0981613125565b6000610e13613101565b60030180546001600160a01b0319166001600160a01b0394909416939093179092555050565b60008061090a613101565b600080610e4f613482565b5460ff1692915050565b60008051602061482a8339815191526000610e72613101565b9050610e7e82336119ae565b80610e9c5750610e9c60008051602061478a833981519152336119ae565b610eb95760405163ea8e4eb560e01b815260040160405180910390fd5b6000610ec3613101565b9050610ece856134a6565b610ed8858561355c565b8315610f61576000610ef486610eef600188614521565b61359e565b90506001816003811115610f0a57610f0a6143f9565b14158015610f2a57506002816003811115610f2757610f276143f9565b14155b15610f5f5785610f3b600187614521565b60405163414e3ac760e01b8152600401610f56929190614534565b60405180910390fd5b505b600085815260208290526040902060050180546001919086908110610f8857610f88614542565b60009182526020822060016003909202010180549215156101000261ff001990931692909217909155604051859187916000805160206147aa8339815191529190a35050505050565b600080610fdc613101565b600084815260208281526040808320815160e0810183528154815260018201548185015260028201548184015260038201546001600160a01b039081166060830152600483015416608082015260058201805484518187028101870190955280855296975094959094919360a0860193929190879084015b828210156111595760008481526020908190206040805160a0810182526003860290920180548352600181015460ff8082161515958501959095526101008104851615159284019290925262010000909104909216151560608201526002820180549192916080840191906110c8906144d1565b80601f01602080910402602001604051908101604052809291908181526020018280546110f4906144d1565b80156111415780601f1061111657610100808354040283529160200191611141565b820191906000526020600020905b81548152906001019060200180831161112457829003601f168201915b50505050508152505081526020019060010190611054565b505050508152602001600682018054611171906144d1565b80601f016020809104026020016040519081016040528092919081815260200182805461119d906144d1565b80156111ea5780601f106111bf576101008083540402835291602001916111ea565b820191906000526020600020905b8154815290600101906020018083116111cd57829003601f168201915b505050505081525050905060005b8160a0015151811015611249578160a00151818151811061121b5761121b614542565b6020026020010151606001511561123757506001949350505050565b8061124181614558565b9150506111f8565b506000949350505050565b600061125e613101565b905061127860008051602061478a833981519152336119ae565b6112955760405163ea8e4eb560e01b815260040160405180910390fd5b61129d613826565b60006112a7613101565b6000878152602082905260408120919250805b855181101561152e5760008682815181106112d7576112d7614542565b602090810291909101810151908101519091506001600160e01b03198116638e184b3f60e01b14611327576040516310cb7cf160e21b81526001600160e01b031982166004820152602401610f56565b6000600483516113379190614521565b6001600160401b0381111561134e5761134e614149565b6040519080825280601f01601f191660200182016040528015611378576020820181803683370190505b50905060005b81518110156113e95783611393826004614571565b815181106113a3576113a3614542565b602001015160f81c60f81b8282815181106113c0576113c0614542565b60200101906001600160f81b031916908160001a905350806113e181614558565b91505061137e565b50600080828060200190518101906114019190614584565b90925090506001600160a01b0382163014611431578160405163d08525e960e01b8152600401610f569190613ed6565b806000036114525760405163162908e360e11b815260040160405180910390fd5b61145c8188614571565b60008f815260208b81526040808320815160a08101835286815280840185815281840186815260608301878152855180880190965287865260808401958652600590940180546001818101835591895296909720835160039097020195865590519585018054915193511515620100000262ff0000199415156101000261ff00199815159890981661ffff199093169290921796909617929092169190911790935551929950909160028201906115139082614600565b5050505050505050808061152690614558565b9150506112ba565b508782556003820180546001600160a01b0319166001600160a01b0389161790556006820161155d8a82614600565b50600182018190556000600283018190556004830180546001600160a01b0319166001600160a01b038981169182179092556040805160e08101825286548152602080820187905281830186905260038801549094166060820152608081019290925260058601805482518186028101860190935280835261178c959394889460a087019493929184015b828210156116ed5760008481526020908190206040805160a0810182526003860290920180548352600181015460ff80821615159585019590955261010081048516151592840192909252620100009091049092161515606082015260028201805491929160808401919061165c906144d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611688906144d1565b80156116d55780601f106116aa576101008083540402835291602001916116d5565b820191906000526020600020905b8154815290600101906020018083116116b857829003601f168201915b505050505081525050815260200190600101906115e8565b505050508152602001600682018054611705906144d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611731906144d1565b801561177e5780601f106117535761010080835404028352916020019161177e565b820191906000526020600020905b81548152906001019060200180831161176157829003601f168201915b50505050508152505061384c565b856001600160a01b0316876001600160a01b0316897f4881acb9050bcf1b58cd99d39b4d4497e03c9961e7466fdb95d6e422cd6f9553848d6040516117d29291906146bf565b60405180910390a4505050505050505050565b60008051602061480a83398151915260006117fe613101565b905061180a82336119ae565b80611828575061182860008051602061478a833981519152336119ae565b6118455760405163ea8e4eb560e01b815260040160405180910390fd5b610c766139ce565b6118856040518060a0016040528060008152602001600015158152602001600015158152602001600015158152602001606081525090565b600061188f613101565b6000858152602082905260409020600501805491925090849081106118b6576118b6614542565b60009182526020918290206040805160a081018252600390930290910180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190611923906144d1565b80601f016020809104026020016040519081016040528092919081815260200182805461194f906144d1565b801561199c5780601f106119715761010080835404028352916020019161199c565b820191906000526020600020905b81548152906001019060200180831161197f57829003601f168201915b50505050508152505091505092915050565b6000806119b9613132565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b6000806119ef613101565b600084815260208281526040808320815160e0810183528154815260018201548185015260028201548184015260038201546001600160a01b039081166060830152600483015416608082015260058201805484518187028101870190955280855296975094959094919360a0860193929190879084015b82821015611b6c5760008481526020908190206040805160a0810182526003860290920180548352600181015460ff808216151595850195909552610100810485161515928401929092526201000090910490921615156060820152600282018054919291608084019190611adb906144d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b07906144d1565b8015611b545780601f10611b2957610100808354040283529160200191611b54565b820191906000526020600020905b815481529060010190602001808311611b3757829003601f168201915b50505050508152505081526020019060010190611a67565b505050508152602001600682018054611b84906144d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb0906144d1565b8015611bfd5780601f10611bd257610100808354040283529160200191611bfd565b820191906000526020600020905b815481529060010190602001808311611be057829003601f168201915b505050919092525050506001830154604051631f27a4f360e11b8152600481018790529192506000916001600160a01b0390911690633e4f49e690602401602060405180830381865afa158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c91906146d8565b90506006816009811115611c9257611c926143f9565b14158015611cb257506008816009811115611caf57611caf6143f9565b14155b8015611cd057506009816009811115611ccd57611ccd6143f9565b14155b15611ce057506000949350505050565b60005b8260a0015151811015611d37576000611cfc878361359e565b90506000816003811115611d1257611d126143f9565b03611d24575060019695505050505050565b5080611d2f81614558565b915050611ce3565b50600095945050505050565b6000611d4e81613125565b6000611d58613101565b600401929092555050565b60008051602061482a8339815191526000611d7c613101565b9050611d8882336119ae565b80611da65750611da660008051602061478a833981519152336119ae565b611dc35760405163ea8e4eb560e01b815260040160405180910390fd5b6000611dcd613101565b9050611dd8866134a6565b611de2868661355c565b8415611e42576000611df987610eef600189614521565b90506001816003811115611e0f57611e0f6143f9565b14158015611e2f57506002816003811115611e2c57611e2c6143f9565b14155b15611e405786610f3b600188614521565b505b600086815260208290526040902060050180546001919087908110611e6957611e69614542565b906000526020600020906003020160010160016101000a81548160ff021916908315150217905550838160000160008881526020019081526020016000206005018681548110611ebb57611ebb614542565b90600052602060002090600302016002019081611ed89190614600565b50604051859087906000805160206147aa83398151915290600090a3505050505050565b600080611f07613101565b6001810154604051631f27a4f360e11b8152600481018690529192506000916001600160a01b0390911690633e4f49e690602401602060405180830381865afa158015611f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c91906146d8565b9050611f8784610fd15