From 7122514eaa0c96de9b0324931fd1f237822d3f81 Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Wed, 18 Dec 2024 17:13:27 +0530 Subject: [PATCH] WIP - OnChain DAO --- src/assets/abis/hb_dao.json | 3918 +++++++---------- src/assets/abis/hb_evm.json | 1849 ++++---- src/assets/abis/hb_timelock.json | 55 + src/assets/abis/hb_wrapper.json | 255 ++ .../etherlink/components/EvmTreasuryTable.tsx | 10 +- .../contracts/baseDAO/hooks/useOriginate.ts | 4 - .../etherlinkDAO/hooks/temp-config.ts | 1875 ++++++++ .../hooks/useEvmDaoCreateStore.tsx | 150 +- .../contracts/token/hooks/useToken.ts | 3 +- src/services/wagmi/context.tsx | 22 + 10 files changed, 4976 insertions(+), 3165 deletions(-) create mode 100644 src/assets/abis/hb_timelock.json create mode 100644 src/assets/abis/hb_wrapper.json create mode 100644 src/services/contracts/etherlinkDAO/hooks/temp-config.ts diff --git a/src/assets/abis/hb_dao.json b/src/assets/abis/hb_dao.json index ff8db245..8817290f 100644 --- a/src/assets/abis/hb_dao.json +++ b/src/assets/abis/hb_dao.json @@ -1,2259 +1,1661 @@ { - "compiler": { - "version": "0.8.24+commit.e11b9ed9" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "contract IVotes", - "name": "_token", - "type": "address" - }, - { - "internalType": "contract TimelockController", - "name": "_timelock", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "uint48", - "name": "minsDelay", - "type": "uint48" - }, - { - "internalType": "uint32", - "name": "minsVoting", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "pThreshold", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "qvrm", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "CheckpointUnorderedInsertion", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "voter", - "type": "address" - } - ], - "name": "GovernorAlreadyCastVote", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "GovernorAlreadyQueuedProposal", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorDisabledDeposit", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "proposer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "votes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "threshold", - "type": "uint256" - } - ], - "name": "GovernorInsufficientProposerVotes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targets", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "calldatas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "values", - "type": "uint256" - } - ], - "name": "GovernorInvalidProposalLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "quorumNumerator", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "quorumDenominator", - "type": "uint256" - } - ], - "name": "GovernorInvalidQuorumFraction", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "voter", - "type": "address" - } - ], - "name": "GovernorInvalidSignature", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorInvalidVoteType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "votingPeriod", - "type": "uint256" - } - ], - "name": "GovernorInvalidVotingPeriod", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "GovernorNonexistentProposal", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "GovernorNotQueuedProposal", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "GovernorOnlyExecutor", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "GovernorOnlyProposer", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorQueueNotImplemented", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "GovernorRestrictedProposer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "enum IGovernor.ProposalState", - "name": "current", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "expectedStates", - "type": "bytes32" - } - ], - "name": "GovernorUnexpectedProposalState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "currentNonce", - "type": "uint256" - } - ], - "name": "InvalidAccountNonce", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidShortString", - "type": "error" - }, - { - "inputs": [], - "name": "QueueEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "QueueFull", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "bits", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SafeCastOverflowedUintDowncast", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "str", - "type": "string" - } - ], - "name": "StringTooLong", - "type": "error" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "ProposalCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "proposer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "string[]", - "name": "signatures", - "type": "string[]" - }, - { - "indexed": false, - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "voteStart", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "voteEnd", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "name": "ProposalCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "ProposalExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "etaSeconds", - "type": "uint256" - } - ], - "name": "ProposalQueued", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldProposalThreshold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newProposalThreshold", - "type": "uint256" - } - ], - "name": "ProposalThresholdSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldQuorumNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newQuorumNumerator", - "type": "uint256" - } - ], - "name": "QuorumNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldTimelock", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newTimelock", - "type": "address" - } - ], - "name": "TimelockChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "voter", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "weight", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "voter", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "weight", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "reason", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "params", - "type": "bytes" - } - ], - "name": "VoteCastWithParams", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldVotingDelay", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newVotingDelay", - "type": "uint256" - } - ], - "name": "VotingDelaySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldVotingPeriod", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newVotingPeriod", - "type": "uint256" - } - ], - "name": "VotingPeriodSet", - "type": "event" - }, - { - "inputs": [], - "name": "BALLOT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CLOCK_MODE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "COUNTING_MODE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "EXTENDED_BALLOT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "descriptionHash", - "type": "bytes32" - } - ], - "name": "cancel", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - } - ], - "name": "castVote", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "internalType": "address", - "name": "voter", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "castVoteBySig", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "castVoteWithReason", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - }, - { - "internalType": "bytes", - "name": "params", - "type": "bytes" - } - ], - "name": "castVoteWithReasonAndParams", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "internalType": "address", - "name": "voter", - "type": "address" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - }, - { - "internalType": "bytes", - "name": "params", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "castVoteWithReasonAndParamsBySig", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "clock", - "outputs": [ - { - "internalType": "uint48", - "name": "", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "descriptionHash", - "type": "bytes32" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - } - ], - "name": "getVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "params", - "type": "bytes" - } - ], - "name": "getVotesWithParams", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasVoted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "descriptionHash", - "type": "bytes32" - } - ], - "name": "hashProposal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC1155BatchReceived", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC1155Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalDeadline", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalEta", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalNeedsQueuing", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalProposer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalSnapshot", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposalThreshold", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "againstVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "forVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "abstainVotes", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "name": "propose", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "descriptionHash", - "type": "bytes32" - } - ], - "name": "queue", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "quorum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "quorumDenominator", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - } - ], - "name": "quorumNumerator", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "quorumNumerator", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "relay", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newProposalThreshold", - "type": "uint256" - } - ], - "name": "setProposalThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint48", - "name": "newVotingDelay", - "type": "uint48" - } - ], - "name": "setVotingDelay", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "newVotingPeriod", - "type": "uint32" - } - ], - "name": "setVotingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "state", - "outputs": [ - { - "internalType": "enum IGovernor.ProposalState", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "timelock", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC5805", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newQuorumNumerator", - "type": "uint256" - } - ], - "name": "updateQuorumNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TimelockController", - "name": "newTimelock", - "type": "address" - } - ], - "name": "updateTimelock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "votingDelay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "votingPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "devdoc": { - "errors": { - "CheckpointUnorderedInsertion()": [ - { - "details": "A value was attempted to be inserted on a past checkpoint." - } - ], - "FailedInnerCall()": [ - { - "details": "A call to an address target failed. The target may have reverted." - } - ], - "GovernorAlreadyCastVote(address)": [ - { - "details": "The vote was already cast." - } - ], - "GovernorAlreadyQueuedProposal(uint256)": [ - { - "details": "The proposal has already been queued." - } - ], - "GovernorDisabledDeposit()": [ - { - "details": "Token deposits are disabled in this contract." - } - ], - "GovernorInsufficientProposerVotes(address,uint256,uint256)": [ - { - "details": "The `proposer` does not have the required votes to create a proposal." - } - ], - "GovernorInvalidProposalLength(uint256,uint256,uint256)": [ - { - "details": "Empty proposal or a mismatch between the parameters length for a proposal call." - } - ], - "GovernorInvalidQuorumFraction(uint256,uint256)": [ - { - "details": "The quorum set is not a valid fraction." - } - ], - "GovernorInvalidSignature(address)": [ - { - "details": "The provided signature is not valid for the expected `voter`. If the `voter` is a contract, the signature is not valid using {IERC1271-isValidSignature}." - } - ], - "GovernorInvalidVoteType()": [ - { - "details": "The vote type used is not valid for the corresponding counting module." - } - ], - "GovernorInvalidVotingPeriod(uint256)": [ - { - "details": "The voting period set is not a valid period." - } - ], - "GovernorNonexistentProposal(uint256)": [ - { - "details": "The `proposalId` doesn't exist." - } - ], - "GovernorNotQueuedProposal(uint256)": [ - { - "details": "The proposal hasn't been queued yet." - } - ], - "GovernorOnlyExecutor(address)": [ - { - "details": "The `account` is not the governance executor." - } - ], - "GovernorOnlyProposer(address)": [ - { - "details": "The `account` is not a proposer." - } - ], - "GovernorQueueNotImplemented()": [ - { - "details": "Queue operation is not implemented for this governor. Execute should be called directly." - } - ], - "GovernorRestrictedProposer(address)": [ - { - "details": "The `proposer` is not allowed to create a proposal." - } - ], - "GovernorUnexpectedProposalState(uint256,uint8,bytes32)": [ - { - "details": "The current state of a proposal is not the required for performing an operation. The `expectedStates` is a bitmap with the bits enabled for each ProposalState enum position counting from right to left. NOTE: If `expectedState` is `bytes32(0)`, the proposal is expected to not be in any state (i.e. not exist). This is the case when a proposal that is expected to be unset is already initiated (the proposal is duplicated). See {Governor-_encodeStateBitmap}." - } - ], - "InvalidAccountNonce(address,uint256)": [ - { - "details": "The nonce used for an `account` is not the expected current nonce." - } - ], - "QueueEmpty()": [ - { - "details": "An operation (e.g. {front}) couldn't be completed due to the queue being empty." - } - ], - "QueueFull()": [ - { - "details": "A push operation couldn't be completed due to the queue being full." - } - ], - "SafeCastOverflowedUintDowncast(uint8,uint256)": [ - { - "details": "Value doesn't fit in an uint of `bits` size." - } - ] - }, - "events": { - "EIP712DomainChanged()": { - "details": "MAY be emitted to signal that the domain could have changed." - }, - "ProposalCanceled(uint256)": { - "details": "Emitted when a proposal is canceled." - }, - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": { - "details": "Emitted when a proposal is created." - }, - "ProposalExecuted(uint256)": { - "details": "Emitted when a proposal is executed." - }, - "ProposalQueued(uint256,uint256)": { - "details": "Emitted when a proposal is queued." - }, - "TimelockChange(address,address)": { - "details": "Emitted when the timelock controller used for proposal execution is modified." - }, - "VoteCast(address,uint256,uint8,uint256,string)": { - "details": "Emitted when a vote is cast without params. Note: `support` values should be seen as buckets. Their interpretation depends on the voting module used." - }, - "VoteCastWithParams(address,uint256,uint8,uint256,string,bytes)": { - "details": "Emitted when a vote is cast with params. Note: `support` values should be seen as buckets. Their interpretation depends on the voting module used. `params` are additional encoded parameters. Their interpepretation also depends on the voting module used." - } - }, - "kind": "dev", - "methods": { - "CLOCK_MODE()": { - "details": "Machine-readable description of the clock as specified in EIP-6372." - }, - "COUNTING_MODE()": { - "details": "See {IGovernor-COUNTING_MODE}." - }, - "cancel(address[],uint256[],bytes[],bytes32)": { - "details": "See {IGovernor-cancel}." - }, - "castVote(uint256,uint8)": { - "details": "See {IGovernor-castVote}." - }, - "castVoteBySig(uint256,uint8,address,bytes)": { - "details": "See {IGovernor-castVoteBySig}." - }, - "castVoteWithReason(uint256,uint8,string)": { - "details": "See {IGovernor-castVoteWithReason}." - }, - "castVoteWithReasonAndParams(uint256,uint8,string,bytes)": { - "details": "See {IGovernor-castVoteWithReasonAndParams}." - }, - "castVoteWithReasonAndParamsBySig(uint256,uint8,address,string,bytes,bytes)": { - "details": "See {IGovernor-castVoteWithReasonAndParamsBySig}." - }, - "clock()": { - "details": "Clock (as specified in EIP-6372) is set to match the token's clock. Fallback to block numbers if the token does not implement EIP-6372." - }, - "eip712Domain()": { - "details": "See {IERC-5267}." - }, - "execute(address[],uint256[],bytes[],bytes32)": { - "details": "See {IGovernor-execute}." - }, - "getVotes(address,uint256)": { - "details": "See {IGovernor-getVotes}." - }, - "getVotesWithParams(address,uint256,bytes)": { - "details": "See {IGovernor-getVotesWithParams}." - }, - "hasVoted(uint256,address)": { - "details": "See {IGovernor-hasVoted}." - }, - "hashProposal(address[],uint256[],bytes[],bytes32)": { - "details": "See {IGovernor-hashProposal}. The proposal id is produced by hashing the ABI encoded `targets` array, the `values` array, the `calldatas` array and the descriptionHash (bytes32 which itself is the keccak256 hash of the description string). This proposal id can be produced from the proposal data which is part of the {ProposalCreated} event. It can even be computed in advance, before the proposal is submitted. Note that the chainId and the governor address are not part of the proposal id computation. Consequently, the same proposal (with same operation and same description) will have the same id if submitted on multiple governors across multiple networks. This also means that in order to execute the same operation twice (on the same governor) the proposer will have to change the description in order to avoid proposal id conflicts." - }, - "name()": { - "details": "See {IGovernor-name}." - }, - "nonces(address)": { - "details": "Returns the next unused nonce for an address." - }, - "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": { - "details": "See {IERC1155Receiver-onERC1155BatchReceived}. Receiving tokens is disabled if the governance executor is other than the governor itself (eg. when using with a timelock)." - }, - "onERC1155Received(address,address,uint256,uint256,bytes)": { - "details": "See {IERC1155Receiver-onERC1155Received}. Receiving tokens is disabled if the governance executor is other than the governor itself (eg. when using with a timelock)." - }, - "onERC721Received(address,address,uint256,bytes)": { - "details": "See {IERC721Receiver-onERC721Received}. Receiving tokens is disabled if the governance executor is other than the governor itself (eg. when using with a timelock)." - }, - "proposalDeadline(uint256)": { - "details": "See {IGovernor-proposalDeadline}." - }, - "proposalEta(uint256)": { - "details": "See {IGovernor-proposalEta}." - }, - "proposalProposer(uint256)": { - "details": "See {IGovernor-proposalProposer}." - }, - "proposalSnapshot(uint256)": { - "details": "See {IGovernor-proposalSnapshot}." - }, - "proposalVotes(uint256)": { - "details": "Accessor to the internal vote counts." - }, - "propose(address[],uint256[],bytes[],string)": { - "details": "See {IGovernor-propose}. This function has opt-in frontrunning protection, described in {_isValidDescriptionForProposer}." - }, - "queue(address[],uint256[],bytes[],bytes32)": { - "details": "See {IGovernor-queue}." - }, - "quorumDenominator()": { - "details": "Returns the quorum denominator. Defaults to 100, but may be overridden." - }, - "quorumNumerator()": { - "details": "Returns the current quorum numerator. See {quorumDenominator}." - }, - "quorumNumerator(uint256)": { - "details": "Returns the quorum numerator at a specific timepoint. See {quorumDenominator}." - }, - "relay(address,uint256,bytes)": { - "details": "Relays a transaction or function call to an arbitrary target. In cases where the governance executor is some contract other than the governor itself, like when using a timelock, this function can be invoked in a governance proposal to recover tokens or Ether that was sent to the governor contract by mistake. Note that if the executor is simply the governor itself, use of `relay` is redundant." - }, - "setProposalThreshold(uint256)": { - "details": "Update the proposal threshold. This operation can only be performed through a governance proposal. Emits a {ProposalThresholdSet} event." - }, - "setVotingDelay(uint48)": { - "details": "Update the voting delay. This operation can only be performed through a governance proposal. Emits a {VotingDelaySet} event." - }, - "setVotingPeriod(uint32)": { - "details": "Update the voting period. This operation can only be performed through a governance proposal. Emits a {VotingPeriodSet} event." - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "timelock()": { - "details": "Public accessor to check the address of the timelock" - }, - "token()": { - "details": "The token that voting power is sourced from." - }, - "updateQuorumNumerator(uint256)": { - "details": "Changes the quorum numerator. Emits a {QuorumNumeratorUpdated} event. Requirements: - Must be called through a governance proposal. - New numerator must be smaller or equal to the denominator." - }, - "updateTimelock(address)": { - "details": "Public endpoint to update the underlying timelock instance. Restricted to the timelock itself, so updates must be proposed, scheduled, and executed through governance proposals. CAUTION: It is not recommended to change the timelock while there are other queued governance proposals." - }, - "version()": { - "details": "See {IGovernor-version}." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "bytecode": "610180604052348015610010575f80fd5b506040516183f43803806183f483398181016040528101906100329190610e8f565b858160ff1688603c876100459190610f75565b603c876100529190610fb1565b868a806100636101af60201b60201c565b6100765f836101ec60201b90919060201c565b61012081815250506100926001826101ec60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506100cf61023960201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050806003908161011b91906111f1565b505061012c8361029360201b60201c565b61013b8261030660201b60201c565b61014a816103bf60201b60201c565b5050508073ffffffffffffffffffffffffffffffffffffffff166101608173ffffffffffffffffffffffffffffffffffffffff1681525050506101928161040460201b60201c565b506101a2816104de60201b60201c565b50505050505050506116ae565b60606040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250905090565b5f60208351101561020d576102068361057b60201b60201c565b9050610233565b8261021d836105e060201b60201c565b5f01908161022b91906111f1565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016102789594939291906112f6565b60405160208183030381529060405280519060200120905090565b7fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a9360085f9054906101000a900465ffffffffffff16826040516102d7929190611377565b60405180910390a18060085f6101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b5f8163ffffffff1603610350575f6040517ff1cfbf0500000000000000000000000000000000000000000000000000000000815260040161034791906113d7565b60405180910390fd5b7f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828600860069054906101000a900463ffffffff1682604051610393929190611420565b60405180910390a180600860066101000a81548163ffffffff021916908363ffffffff16021790555050565b7fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461600754826040516103f2929190611447565b60405180910390a18060078190555050565b5f6104136105e960201b60201c565b90508082111561045c5781816040517f243e5445000000000000000000000000000000000000000000000000000000008152600401610453929190611447565b60405180910390fd5b5f61046b6105f160201b60201c565b905061049e61047e61062360201b60201c565b61048d856106ba60201b60201c565b600a61072760201b9092919060201c565b50507f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b463399781846040516104d1929190611447565b60405180910390a1505050565b7f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161053092919061146e565b60405180910390a180600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80829050601f815111156105c757826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016105be91906114dd565b60405180910390fd5b8051816105d39061152a565b5f1c175f1b915050919050565b5f819050919050565b5f6064905090565b5f610602600a61074860201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b5f6106326107b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561069957506040513d601f19601f820116820180604052508101906106969190611590565b60015b6106b2576106ab6107ba60201b60201c565b90506106b7565b809150505b90565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561071f5760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016107169291906115f4565b60405180910390fd5b819050919050565b5f8061073c855f0185856107cf60201b60201c565b91509150935093915050565b5f80825f018054905090505f81146107a657610778835f0160018361076d919061161b565b610b4360201b60201c565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166107a8565b5f5b915050919050565b5f61016051905090565b5f6107ca43610b5560201b60201c565b905090565b5f805f858054905090505f811115610a5b575f6107fe876001846107f3919061161b565b610b4360201b60201c565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff1611156108e9576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff1603610971578461092088600185610915919061161b565b610b4360201b60201c565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550610a4a565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050610b3b565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b5f825f528160205f2001905092915050565b5f65ffffffffffff8016821115610ba6576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401610b9d929190611687565b60405180910390fd5b819050919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610be882610bbf565b9050919050565b5f610bf982610bde565b9050919050565b610c0981610bef565b8114610c13575f80fd5b50565b5f81519050610c2481610c00565b92915050565b5f610c3482610bbf565b9050919050565b5f610c4582610c2a565b9050919050565b610c5581610c3b565b8114610c5f575f80fd5b50565b5f81519050610c7081610c4c565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610cc482610c7e565b810181811067ffffffffffffffff82111715610ce357610ce2610c8e565b5b80604052505050565b5f610cf5610bae565b9050610d018282610cbb565b919050565b5f67ffffffffffffffff821115610d2057610d1f610c8e565b5b610d2982610c7e565b9050602081019050919050565b8281835e5f83830152505050565b5f610d56610d5184610d06565b610cec565b905082815260208101848484011115610d7257610d71610c7a565b5b610d7d848285610d36565b509392505050565b5f82601f830112610d9957610d98610c76565b5b8151610da9848260208601610d44565b91505092915050565b5f65ffffffffffff82169050919050565b610dcc81610db2565b8114610dd6575f80fd5b50565b5f81519050610de781610dc3565b92915050565b5f63ffffffff82169050919050565b610e0581610ded565b8114610e0f575f80fd5b50565b5f81519050610e2081610dfc565b92915050565b5f819050919050565b610e3881610e26565b8114610e42575f80fd5b50565b5f81519050610e5381610e2f565b92915050565b5f60ff82169050919050565b610e6e81610e59565b8114610e78575f80fd5b50565b5f81519050610e8981610e65565b92915050565b5f805f805f805f60e0888a031215610eaa57610ea9610bb7565b5b5f610eb78a828b01610c16565b9750506020610ec88a828b01610c62565b965050604088015167ffffffffffffffff811115610ee957610ee8610bbb565b5b610ef58a828b01610d85565b9550506060610f068a828b01610dd9565b9450506080610f178a828b01610e12565b93505060a0610f288a828b01610e45565b92505060c0610f398a828b01610e7b565b91505092959891949750929550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f7f82610db2565b9150610f8a83610db2565b9250828202610f9881610db2565b9150808214610faa57610fa9610f48565b5b5092915050565b5f610fbb82610ded565b9150610fc683610ded565b9250828202610fd481610ded565b9150808214610fe657610fe5610f48565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061103b57607f821691505b60208210810361104e5761104d610ff7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026110b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611075565b6110ba8683611075565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6110f56110f06110eb84610e26565b6110d2565b610e26565b9050919050565b5f819050919050565b61110e836110db565b61112261111a826110fc565b848454611081565b825550505050565b5f90565b61113661112a565b611141818484611105565b505050565b5b81811015611164576111595f8261112e565b600181019050611147565b5050565b601f8211156111a95761117a81611054565b61118384611066565b81016020851015611192578190505b6111a661119e85611066565b830182611146565b50505b505050565b5f82821c905092915050565b5f6111c95f19846008026111ae565b1980831691505092915050565b5f6111e183836111ba565b9150826002028217905092915050565b6111fa82610fed565b67ffffffffffffffff81111561121357611212610c8e565b5b61121d8254611024565b611228828285611168565b5f60209050601f831160018114611259575f8415611247578287015190505b61125185826111d6565b8655506112b8565b601f19841661126786611054565b5f5b8281101561128e57848901518255600182019150602085019450602081019050611269565b868310156112ab57848901516112a7601f8916826111ba565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b6112d2816112c0565b82525050565b6112e181610e26565b82525050565b6112f081610bde565b82525050565b5f60a0820190506113095f8301886112c9565b61131660208301876112c9565b61132360408301866112c9565b61133060608301856112d8565b61133d60808301846112e7565b9695505050505050565b5f61136161135c61135784610db2565b6110d2565b610e26565b9050919050565b61137181611347565b82525050565b5f60408201905061138a5f830185611368565b6113976020830184611368565b9392505050565b5f819050919050565b5f6113c16113bc6113b78461139e565b6110d2565b610e26565b9050919050565b6113d1816113a7565b82525050565b5f6020820190506113ea5f8301846113c8565b92915050565b5f61140a61140561140084610ded565b6110d2565b610e26565b9050919050565b61141a816113f0565b82525050565b5f6040820190506114335f830185611411565b6114406020830184611411565b9392505050565b5f60408201905061145a5f8301856112d8565b61146760208301846112d8565b9392505050565b5f6040820190506114815f8301856112e7565b61148e60208301846112e7565b9392505050565b5f82825260208201905092915050565b5f6114af82610fed565b6114b98185611495565b93506114c9818560208601610d36565b6114d281610c7e565b840191505092915050565b5f6020820190508181035f8301526114f581846114a5565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f61152182516112c0565b80915050919050565b5f611534826114fd565b8261153e84611507565b905061154981611516565b92506020821015611589576115847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802611075565b831692505b5050919050565b5f602082840312156115a5576115a4610bb7565b5b5f6115b284828501610dd9565b91505092915050565b5f819050919050565b5f6115de6115d96115d4846115bb565b6110d2565b610e59565b9050919050565b6115ee816115c4565b82525050565b5f6040820190506116075f8301856115e5565b61161460208301846112d8565b9392505050565b5f61162582610e26565b915061163083610e26565b925082820390508181111561164857611647610f48565b5b92915050565b5f819050919050565b5f61167161166c6116678461164e565b6110d2565b610e59565b9050919050565b61168181611657565b82525050565b5f60408201905061169a5f830185611678565b6116a760208301846112d8565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051616ceb6117095f395f611edc01525f612df701525f612dbc01525f61455601525f61453501525f61388d01525f6138e301525f61390c0152616ceb5ff3fe608060405260043610610296575f3560e01c80637ecebe0011610159578063c01f9e37116100c0578063e540d01d11610079578063e540d01d14610b89578063eb9019d414610bb1578063ece40cc114610bed578063f23a6e6114610c15578063f8ce560a14610c51578063fc0c546a14610c8d57610309565b8063c01f9e3714610a77578063c28bc2fa14610ab3578063c59057e414610acf578063d33219b414610b0b578063dd4e2ba514610b35578063deaaa7cc14610b5f57610309565b8063a7713a7011610112578063a7713a7014610947578063a890c91014610971578063a9a9529414610999578063ab58fb8e146109d5578063b58131b014610a11578063bc197c8114610a3b57610309565b80637ecebe001461080f57806384b0196e1461084b5780638ff262e31461087b57806391ddadf4146108b757806397c3d334146108e15780639a802a6d1461090b57610309565b806343859632116101fd5780635b8d0e0d116101b65780635b8d0e0d146106bb5780635f398a14146106f757806360c4247f14610733578063790518871461076f5780637b3c71d3146107975780637d5e81e2146107d357610309565b80634385963214610575578063452115d6146105b15780634bf5d7e9146105ed578063544ffc9c1461061757806354fd4d5014610655578063567813881461067f57610309565b8063160cbed71161024f578063160cbed71461043d5780632656227d146104795780632d63f693146104a95780632fe3e261146104e55780633932abb11461050f5780633e4f49e61461053957610309565b806301ffc9a71461030d57806302a251a31461034957806306f3f9e61461037357806306fdde031461039b578063143489d0146103c5578063150b7a021461040157610309565b36610309573073ffffffffffffffffffffffffffffffffffffffff166102ba610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614610307576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b5f80fd5b348015610318575f80fd5b50610333600480360381019061032e91906148c7565b610cc5565b604051610340919061490c565b60405180910390f35b348015610354575f80fd5b5061035d610da6565b60405161036a919061493d565b60405180910390f35b34801561037e575f80fd5b5061039960048036038101906103949190614980565b610db4565b005b3480156103a6575f80fd5b506103af610dc8565b6040516103bc9190614a1b565b60405180910390f35b3480156103d0575f80fd5b506103eb60048036038101906103e69190614980565b610e58565b6040516103f89190614a7a565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190614be9565b610e93565b6040516104349190614c78565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e9190614f26565b610f12565b604051610470919061493d565b60405180910390f35b610493600480360381019061048e9190614f26565b611008565b6040516104a0919061493d565b60405180910390f35b3480156104b4575f80fd5b506104cf60048036038101906104ca9190614980565b6111e2565b6040516104dc919061493d565b60405180910390f35b3480156104f0575f80fd5b506104f9611218565b6040516105069190614fed565b60405180910390f35b34801561051a575f80fd5b5061052361123c565b604051610530919061493d565b60405180910390f35b348015610544575f80fd5b5061055f600480360381019061055a9190614980565b61124a565b60405161056c9190615079565b60405180910390f35b348015610580575f80fd5b5061059b60048036038101906105969190615092565b61125b565b6040516105a8919061490c565b60405180910390f35b3480156105bc575f80fd5b506105d760048036038101906105d29190614f26565b6112c0565b6040516105e4919061493d565b60405180910390f35b3480156105f8575f80fd5b50610601611380565b60405161060e9190614a1b565b60405180910390f35b348015610622575f80fd5b5061063d60048036038101906106389190614980565b61143d565b60405161064c939291906150d0565b60405180910390f35b348015610660575f80fd5b50610669611470565b6040516106769190614a1b565b60405180910390f35b34801561068a575f80fd5b506106a560048036038101906106a0919061513b565b6114ad565b6040516106b2919061493d565b60405180910390f35b3480156106c6575f80fd5b506106e160048036038101906106dc91906151d2565b6114dc565b6040516106ee919061493d565b60405180910390f35b348015610702575f80fd5b5061071d600480360381019061071891906152b4565b61160b565b60405161072a919061493d565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190614980565b611673565b604051610766919061493d565b60405180910390f35b34801561077a575f80fd5b506107956004803603810190610790919061538f565b61176c565b005b3480156107a2575f80fd5b506107bd60048036038101906107b891906153ba565b611780565b6040516107ca919061493d565b60405180910390f35b3480156107de575f80fd5b506107f960048036038101906107f491906154c9565b6117e6565b604051610806919061493d565b60405180910390f35b34801561081a575f80fd5b506108356004803603810190610830919061559d565b6118d3565b604051610842919061493d565b60405180910390f35b348015610856575f80fd5b5061085f611919565b60405161087297969594939291906156b9565b60405180910390f35b348015610886575f80fd5b506108a1600480360381019061089c919061573b565b6119be565b6040516108ae919061493d565b60405180910390f35b3480156108c2575f80fd5b506108cb611a92565b6040516108d891906157ca565b60405180910390f35b3480156108ec575f80fd5b506108f5611b1d565b604051610902919061493d565b60405180910390f35b348015610916575f80fd5b50610931600480360381019061092c91906157e3565b611b25565b60405161093e919061493d565b60405180910390f35b348015610952575f80fd5b5061095b611b3a565b604051610968919061493d565b60405180910390f35b34801561097c575f80fd5b506109976004803603810190610992919061589b565b611b66565b005b3480156109a4575f80fd5b506109bf60048036038101906109ba9190614980565b611b7a565b6040516109cc919061490c565b60405180910390f35b3480156109e0575f80fd5b506109fb60048036038101906109f69190614980565b611b8b565b604051610a08919061493d565b60405180910390f35b348015610a1c575f80fd5b50610a25611bc1565b604051610a32919061493d565b60405180910390f35b348015610a46575f80fd5b50610a616004803603810190610a5c91906158c6565b611bcf565b604051610a6e9190614c78565b60405180910390f35b348015610a82575f80fd5b50610a9d6004803603810190610a989190614980565b611c4f565b604051610aaa919061493d565b60405180910390f35b610acd6004803603810190610ac891906159e6565b611cb9565b005b348015610ada575f80fd5b50610af56004803603810190610af09190614f26565b611d42565b604051610b02919061493d565b60405180910390f35b348015610b16575f80fd5b50610b1f611d7c565b604051610b2c9190614a7a565b60405180910390f35b348015610b40575f80fd5b50610b49611da4565b604051610b569190614a1b565b60405180910390f35b348015610b6a575f80fd5b50610b73611de1565b604051610b809190614fed565b60405180910390f35b348015610b94575f80fd5b50610baf6004803603810190610baa9190615a90565b611e05565b005b348015610bbc575f80fd5b50610bd76004803603810190610bd29190615abb565b611e19565b604051610be4919061493d565b60405180910390f35b348015610bf8575f80fd5b50610c136004803603810190610c0e9190614980565b611e34565b005b348015610c20575f80fd5b50610c3b6004803603810190610c369190615af9565b611e48565b604051610c489190614c78565b60405180910390f35b348015610c5c575f80fd5b50610c776004803603810190610c729190614980565b611ec8565b604051610c84919061493d565b60405180910390f35b348015610c98575f80fd5b50610ca1611ed9565b604051610cae9190615be7565b60405180910390f35b5f610cc0611f00565b905090565b5f7f65455a86000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d8f57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d9f5750610d9e82611f28565b5b9050919050565b5f610daf611f91565b905090565b610dbc611fb0565b610dc5816120a5565b50565b606060038054610dd790615c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390615c2d565b8015610e4e5780601f10610e2557610100808354040283529160200191610e4e565b820191905f5260205f20905b815481529060010190602001808311610e3157829003601f168201915b5050505050905090565b5f60045f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f3073ffffffffffffffffffffffffffffffffffffffff16610eb3610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63150b7a0260e01b9050949350505050565b5f80610f2086868686611d42565b9050610f3581610f306004612167565b61218b565b505f610f4482888888886121f6565b90505f8165ffffffffffff1614610fc9578060045f8481526020019081526020015f206001015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928282604051610fbc929190615c8d565b60405180910390a1610ffb565b6040517f90884a4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8192505050949350505050565b5f8061101686868686611d42565b9050611036816110266005612167565b6110306004612167565b1761218b565b50600160045f8381526020019081526020015f205f01601e6101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff16611082610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614611138575f5b8651811015611136573073ffffffffffffffffffffffffffffffffffffffff168782815181106110d2576110d1615cb4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361112b5761112a85828151811061110b5761110a615cb4565b5b602002602001015180519060200120600561220f90919063ffffffff16565b5b80600101905061109f565b505b611145818787878761232e565b3073ffffffffffffffffffffffffffffffffffffffff16611164610cb7565b73ffffffffffffffffffffffffffffffffffffffff161415801561118f575061118d6005612342565b155b1561119f5761119e60056123ae565b5b7f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f816040516111ce919061493d565b60405180910390a180915050949350505050565b5f60045f8381526020019081526020015f205f0160149054906101000a900465ffffffffffff1665ffffffffffff169050919050565b7f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a81181565b5f611245612424565b905090565b5f61125482612446565b9050919050565b5f60095f8481526020019081526020015f206003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f806112ce86868686611d42565b90506112e2816112dd5f612167565b61218b565b506112ec81610e58565b73ffffffffffffffffffffffffffffffffffffffff1661130a6125fb565b73ffffffffffffffffffffffffffffffffffffffff16146113695761132d6125fb565b6040517f233d98e30000000000000000000000000000000000000000000000000000000081526004016113609190614a7a565b60405180910390fd5b61137586868686612602565b915050949350505050565b606061138a611ed9565b73ffffffffffffffffffffffffffffffffffffffff16634bf5d7e96040518163ffffffff1660e01b81526004015f60405180830381865afa9250505080156113f457506040513d5f823e3d601f19601f820116820180604052508101906113f19190615d4f565b60015b611435576040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905061143a565b809150505b90565b5f805f8060095f8681526020019081526020015f209050805f015481600101548260020154935093509350509193909250565b60606040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250905090565b5f806114b76125fb565b90506114d384828560405180602001604052805f815250612619565b91505092915050565b5f80611569876115637f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a8118c8c8c6115128e612638565b8d8d604051611522929190615dc4565b60405180910390208c805190602001206040516020016115489796959493929190615deb565b6040516020818303038152906040528051906020012061268b565b856126a4565b9050806115ad57866040517f94ab6c070000000000000000000000000000000000000000000000000000000081526004016115a49190614a7a565b60405180910390fd5b6115fd89888a89898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505088612731565b915050979650505050505050565b5f806116156125fb565b905061166787828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505087612731565b91505095945050505050565b5f80600a5f018054905090505f600a5f016001836116919190615e85565b815481106116a2576116a1615cb4565b5b905f5260205f200190505f815f015f9054906101000a900465ffffffffffff1690505f825f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff169050858265ffffffffffff1611611728578079ffffffffffffffffffffffffffffffffffffffffffffffffffff16945050505050611767565b6117446117348761282e565b600a61288790919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169450505050505b919050565b611774611fb0565b61177d81612974565b50565b5f8061178a6125fb565b90506117db86828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050612619565b915050949350505050565b5f806117f06125fb565b90506117fc81846129e7565b61183d57806040517fd9b395570000000000000000000000000000000000000000000000000000000081526004016118349190614a7a565b60405180910390fd5b5f61186382600161184c611a92565b6118569190615eb8565b65ffffffffffff16611e19565b90505f61186e611bc1565b9050808210156118b9578282826040517fc242ee160000000000000000000000000000000000000000000000000000000081526004016118b093929190615ef1565b60405180910390fd5b6118c68888888887612b2f565b9350505050949350505050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6060805f805f606061192a612db4565b611932612dee565b46305f801b5f67ffffffffffffffff81111561195157611950614ac5565b5b60405190808252806020026020018201604052801561197f5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f80611a2984611a237ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d78989896119f48b612638565b604051602001611a08959493929190615f26565b6040516020818303038152906040528051906020012061268b565b856126a4565b905080611a6d57836040517f94ab6c07000000000000000000000000000000000000000000000000000000008152600401611a649190614a7a565b60405180910390fd5b611a8786858760405180602001604052805f815250612619565b915050949350505050565b5f611a9b611ed9565b73ffffffffffffffffffffffffffffffffffffffff166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b0257506040513d601f19601f82011682018060405250810190611aff9190615f8b565b60015b611b1557611b0e612e29565b9050611b1a565b809150505b90565b5f6064905090565b5f611b31848484612e38565b90509392505050565b5f611b45600a612ec3565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b611b6e611fb0565b611b7781612f25565b50565b5f611b8482612fc2565b9050919050565b5f60045f8381526020019081526020015f206001015f9054906101000a900465ffffffffffff1665ffffffffffff169050919050565b5f611bca612fcc565b905090565b5f3073ffffffffffffffffffffffffffffffffffffffff16611bef610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63bc197c8160e01b905095945050505050565b5f60045f8381526020019081526020015f205f01601a9054906101000a900463ffffffff1663ffffffff1660045f8481526020019081526020015f205f0160149054906101000a900465ffffffffffff16611caa9190615fb6565b65ffffffffffff169050919050565b611cc1611fb0565b5f808573ffffffffffffffffffffffffffffffffffffffff16858585604051611ceb929190615dc4565b5f6040518083038185875af1925050503d805f8114611d25576040519150601f19603f3d011682016040523d82523d5f602084013e611d2a565b606091505b5091509150611d398282612fd5565b50505050505050565b5f84848484604051602001611d5a94939291906161b3565b604051602081830303815290604052805190602001205f1c9050949350505050565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280602081526020017f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e815250905090565b7ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d781565b611e0d611fb0565b611e1681612ff9565b50565b5f611e2c8383611e276130b2565b612e38565b905092915050565b611e3c611fb0565b611e45816130c8565b50565b5f3073ffffffffffffffffffffffffffffffffffffffff16611e68610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614611eb5576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63f23a6e6160e01b905095945050505050565b5f611ed28261310d565b9050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f600860069054906101000a900463ffffffff1663ffffffff16905090565b611fb86125fb565b73ffffffffffffffffffffffffffffffffffffffff16611fd6610cb7565b73ffffffffffffffffffffffffffffffffffffffff161461203557611ff96125fb565b6040517f47096e4700000000000000000000000000000000000000000000000000000000815260040161202c9190614a7a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16612054610cb7565b73ffffffffffffffffffffffffffffffffffffffff16146120a3575f6120786131b9565b604051612086929190615dc4565b604051809103902090505b8061209c60056131c5565b0361209157505b565b5f6120ae611b1d565b9050808211156120f75781816040517f243e54450000000000000000000000000000000000000000000000000000000081526004016120ee92919061620b565b60405180910390fd5b5f612100611b3a565b905061212761210d611a92565b6121168561331a565b600a6133879092919063ffffffff16565b50507f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997818460405161215a92919061620b565b60405180910390a1505050565b5f81600781111561217b5761217a615006565b5b60ff166001901b5f1b9050919050565b5f806121968461124a565b90505f801b836121a583612167565b16036121ec578381846040517f31b75e4d0000000000000000000000000000000000000000000000000000000081526004016121e393929190616232565b60405180910390fd5b8091505092915050565b5f61220486868686866133a2565b905095945050505050565b5f825f0160109054906101000a90046fffffffffffffffffffffffffffffffff169050825f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16600182016fffffffffffffffffffffffffffffffff16036122b0576040517f8acb5f2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81836001015f836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060018101835f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b61233b85858585856135a8565b5050505050565b5f815f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16149050919050565b5f815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505f815f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050565b5f60085f9054906101000a900465ffffffffffff1665ffffffffffff16905090565b5f806124518361365c565b90506005600781111561246757612466615006565b5b81600781111561247a57612479615006565b5b1461248857809150506125f6565b5f600c5f8581526020019081526020015f20549050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663584b153e826040518263ffffffff1660e01b81526004016124f79190614fed565b602060405180830381865afa158015612512573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125369190616291565b15612546576005925050506125f6565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ab0f529826040518263ffffffff1660e01b81526004016125a09190614fed565b602060405180830381865afa1580156125bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125df9190616291565b156125ef576007925050506125f6565b6002925050505b919050565b5f33905090565b5f61260f858585856137b3565b9050949350505050565b5f61262e858585856126296130b2565b612731565b9050949350505050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f61269d61269761388a565b83613940565b9050919050565b5f805f6126b18585613980565b50915091505f60038111156126c9576126c8615006565b5b8160038111156126dc576126db615006565b5b14801561271457508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061272657506127258686866139d5565b5b925050509392505050565b5f612745866127406001612167565b61218b565b505f61275a86612754896111e2565b85612e38565b90506127698787878487613af4565b5f8351036127ca578573ffffffffffffffffffffffffffffffffffffffff167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516127bd94939291906162bc565b60405180910390a2612821565b8573ffffffffffffffffffffffffffffffffffffffff167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb8712888784888860405161281895949392919061634e565b60405180910390a25b8091505095945050505050565b5f65ffffffffffff801682111561287f576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016128769291906163e6565b60405180910390fd5b819050919050565b5f80835f018054905090505f808290506005831115612908575f6128aa84613ce3565b846128b59190615e85565b90506128c3875f0182613dd9565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156128f657809150612906565b600181612903919061640d565b92505b505b5f612917875f01878585613deb565b90505f811461296657612938875f016001836129339190615e85565b613dd9565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612968565b5f5b94505050505092915050565b7fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a9360085f9054906101000a900465ffffffffffff16826040516129b8929190616440565b60405180910390a18060085f6101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b5f80825190506034811015612a00576001915050612b29565b5f6014820384015190507f2370726f706f7365723d3078000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff191614612a6a57600192505050612b29565b5f80602884612a799190615e85565b90505b83811015612af3575f80612aac888481518110612a9c57612a9b615cb4565b5b602001015160f81c60f81b613e60565b9150915081612ac45760019650505050505050612b29565b8060ff1660048573ffffffffffffffffffffffffffffffffffffffff16901b1793505050806001019050612a7c565b508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161493505050505b92915050565b5f612b438686868680519060200120611d42565b905084518651141580612b5857508351865114155b80612b6357505f8651145b15612bac578551845186516040517f447b05d0000000000000000000000000000000000000000000000000000000008152600401612ba3939291906150d0565b60405180910390fd5b5f60045f8381526020019081526020015f205f0160149054906101000a900465ffffffffffff1665ffffffffffff1614612c2b5780612bea8261124a565b5f801b6040517f31b75e4d000000000000000000000000000000000000000000000000000000008152600401612c2293929190616232565b60405180910390fd5b5f612c3461123c565b612c3c611a92565b65ffffffffffff16612c4e919061640d565b90505f612c59610da6565b90505f60045f8581526020019081526020015f20905084815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612cb98361282e565b815f0160146101000a81548165ffffffffffff021916908365ffffffffffff160217905550612ce782613ef7565b815f01601a6101000a81548163ffffffff021916908363ffffffff1602179055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084868b8b8d5167ffffffffffffffff811115612d4857612d47614ac5565b5b604051908082528060200260200182016040528015612d7b57816020015b6060815260200190600190039081612d665790505b508c89898b612d8a919061640d565b8e604051612da09998979695949392919061656a565b60405180910390a150505095945050505050565b6060612de95f7f0000000000000000000000000000000000000000000000000000000000000000613f4e90919063ffffffff16565b905090565b6060612e2460017f0000000000000000000000000000000000000000000000000000000000000000613f4e90919063ffffffff16565b905090565b5f612e334361282e565b905090565b5f612e41611ed9565b73ffffffffffffffffffffffffffffffffffffffff16633a46b1a885856040518363ffffffff1660e01b8152600401612e7b929190616618565b602060405180830381865afa158015612e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eba9190616653565b90509392505050565b5f80825f018054905090505f8114612f1b57612eed835f01600183612ee89190615e85565b613dd9565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612f1d565b5f5b915050919050565b7f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051612f7792919061667e565b60405180910390a180600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60019050919050565b5f600754905090565b606082612fea57612fe582613ffb565b612ff2565b819050612ff3565b5b92915050565b5f8163ffffffff1603613043575f6040517ff1cfbf0500000000000000000000000000000000000000000000000000000000815260040161303a91906166de565b60405180910390fd5b7f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828600860069054906101000a900463ffffffff1682604051613086929190616727565b60405180910390a180600860066101000a81548163ffffffff021916908363ffffffff16021790555050565b606060405180602001604052805f815250905090565b7fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461600754826040516130fb92919061620b565b60405180910390a18060078190555050565b5f613116611b1d565b61311f83611673565b613127611ed9565b73ffffffffffffffffffffffffffffffffffffffff16638e539e8c856040518263ffffffff1660e01b815260040161315f919061493d565b602060405180830381865afa15801561317a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061319e9190616653565b6131a8919061674e565b6131b291906167bc565b9050919050565b365f8036915091509091565b5f80825f015f9054906101000a90046fffffffffffffffffffffffffffffffff169050825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff1603613264576040517f75e52f4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f20549150826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f205f905560018101835f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050919050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561337f5760d0826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401613376929190616825565b60405180910390fd5b819050919050565b5f80613396855f01858561403f565b91509150935093915050565b5f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561340e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134329190616653565b90505f61343e846143a7565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1c5f4278888885f866040518663ffffffff1660e01b81526004016134a2959493929190616887565b602060405180830381865afa1580156134bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134e19190616901565b600c5f8a81526020019081526020015f2081905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f2a0bb08888885f86886040518763ffffffff1660e01b815260040161355a9695949392919061692c565b5f604051808303815f87803b158015613571575f80fd5b505af1158015613583573d5f803e3d5ffd5b5050505061359b8242613596919061640d565b61282e565b9250505095945050505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e38335e5348686865f6135f3886143a7565b6040518763ffffffff1660e01b8152600401613613959493929190616887565b5f604051808303818588803b15801561362a575f80fd5b505af115801561363c573d5f803e3d5ffd5b5050505050600c5f8681526020019081526020015f205f90555050505050565b5f8060045f8481526020019081526020015f2090505f815f01601e9054906101000a900460ff1690505f825f01601f9054906101000a900460ff16905081156136ab57600793505050506137ae565b80156136bd57600293505050506137ae565b5f6136c7866111e2565b90505f810361370d57856040517f6ad06075000000000000000000000000000000000000000000000000000000008152600401613704919061493d565b60405180910390fd5b5f613716611a92565b65ffffffffffff169050808210613734575f955050505050506137ae565b5f61373e88611c4f565b905081811061375657600196505050505050506137ae565b61375f886143c4565b1580613771575061376f88614408565b155b1561378557600396505050505050506137ae565b5f61378f89611b8b565b036137a357600496505050505050506137ae565b600596505050505050505b919050565b5f806137c18686868661442f565b90505f600c5f8381526020019081526020015f205490505f801b811461387d57600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4d252f5826040518263ffffffff1660e01b815260040161383b9190614fed565b5f604051808303815f87803b158015613852575f80fd5b505af1158015613864573d5f803e3d5ffd5b50505050600c5f8381526020019081526020015f205f90555b8192505050949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561390557507f000000000000000000000000000000000000000000000000000000000000000046145b15613932577f0000000000000000000000000000000000000000000000000000000000000000905061393d565b61393a614511565b90505b90565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f60418451036139c0575f805f602087015192506040870151915060608701515f1a90506139b2888285856145a6565b9550955095505050506139ce565b5f600285515f1b9250925092505b9250925092565b5f805f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401613a029291906169a0565b604051602081830303815290604052631626ba7e60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613a5491906169fe565b5f60405180830381855afa9150503d805f8114613a8c576040519150601f19603f3d011682016040523d82523d5f602084013e613a91565b606091505b5091509150818015613aa557506020815110155b8015613ae95750631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681806020019051810190613ae79190616901565b145b925050509392505050565b5f60095f8781526020019081526020015f209050806003015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613b9657846040517f71c6af49000000000000000000000000000000000000000000000000000000008152600401613b8d9190614a7a565b60405180910390fd5b6001816003015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f6002811115613c0057613bff615006565b5b60ff168460ff1603613c2a5782815f015f828254613c1e919061640d565b92505081905550613cdb565b60016002811115613c3e57613c3d615006565b5b60ff168460ff1603613c695782816001015f828254613c5d919061640d565b92505081905550613cda565b600280811115613c7c57613c7b615006565b5b60ff168460ff1603613ca75782816002015f828254613c9b919061640d565b92505081905550613cd9565b6040517f06b337c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b505050505050565b5f808203613cf3575f9050613dd4565b5f6001613cff8461468d565b901c6001901b90506001818481613d1957613d1861678f565b5b048201901c90506001818481613d3257613d3161678f565b5b048201901c90506001818481613d4b57613d4a61678f565b5b048201901c90506001818481613d6457613d6361678f565b5b048201901c90506001818481613d7d57613d7c61678f565b5b048201901c90506001818481613d9657613d9561678f565b5b048201901c90506001818481613daf57613dae61678f565b5b048201901c9050613dd081828581613dca57613dc961678f565b5b04614764565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015613e55575f613e00848461477c565b90508465ffffffffffff16613e158783613dd9565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff161115613e3f57809250613e4f565b600181613e4c919061640d565b93505b50613ded565b819050949350505050565b5f805f8360f81c90508060ff16602f108015613e7f5750603a8160ff16105b15613e94576001603082039250925050613ef2565b8060ff166040108015613eaa575060478160ff16105b15613ebf576001603782039250925050613ef2565b8060ff166060108015613ed5575060678160ff16105b15613eea576001605782039250925050613ef2565b5f8092509250505b915091565b5f63ffffffff8016821115613f46576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401613f3d929190616a4d565b60405180910390fd5b819050919050565b606060ff5f1b8314613f6a57613f63836147a1565b9050613ff5565b818054613f7690615c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054613fa290615c2d565b8015613fed5780601f10613fc457610100808354040283529160200191613fed565b820191905f5260205f20905b815481529060010190602001808311613fd057829003601f168201915b505050505090505b92915050565b5f8151111561400d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f858054905090505f8111156142bf575f614068876001846140639190615e85565b613dd9565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115614153576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff16036141d557846141848860018561417f9190615e85565b613dd9565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506142ae565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b80602001518593509350505061439f565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b5f813060601b6bffffffffffffffffffffffff1916189050919050565b5f8060095f8481526020019081526020015f209050806002015481600101546143ed919061640d565b6143fe6143f9856111e2565b611ec8565b1115915050919050565b5f8060095f8481526020019081526020015f209050805f0154816001015411915050919050565b5f8061443d86868686611d42565b90506144a18161444d6007612167565b6144576006612167565b6144616002612167565b60018060078081111561447757614476615006565b5b6144819190616a74565b600261448d9190616bd7565b6144979190615e85565b5f1b18181861218b565b50600160045f8381526020019081526020015f205f01601f6101000a81548160ff0219169083151502179055507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c816040516144fd919061493d565b60405180910390a180915050949350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161458b959493929190616c21565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156145e2575f600385925092509250614683565b5f6001888888886040515f81526020016040526040516146059493929190616c72565b6020604051602081039080840390855afa158015614625573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603614676575f60015f801b93509350935050614683565b805f805f1b935093509350505b9450945094915050565b5f805f90505f608084901c11156146ac57608083901c92506080810190505b5f604084901c11156146c657604083901c92506040810190505b5f602084901c11156146e057602083901c92506020810190505b5f601084901c11156146fa57601083901c92506010810190505b5f600884901c111561471457600883901c92506008810190505b5f600484901c111561472e57600483901c92506004810190505b5f600284901c111561474857600283901c92506002810190505b5f600184901c111561475b576001810190505b80915050919050565b5f8183106147725781614774565b825b905092915050565b5f600282841861478c91906167bc565b828416614799919061640d565b905092915050565b60605f6147ad83614813565b90505f602067ffffffffffffffff8111156147cb576147ca614ac5565b5b6040519080825280601f01601f1916602001820160405280156147fd5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f811115614858576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6148a681614872565b81146148b0575f80fd5b50565b5f813590506148c18161489d565b92915050565b5f602082840312156148dc576148db61486a565b5b5f6148e9848285016148b3565b91505092915050565b5f8115159050919050565b614906816148f2565b82525050565b5f60208201905061491f5f8301846148fd565b92915050565b5f819050919050565b61493781614925565b82525050565b5f6020820190506149505f83018461492e565b92915050565b61495f81614925565b8114614969575f80fd5b50565b5f8135905061497a81614956565b92915050565b5f602082840312156149955761499461486a565b5b5f6149a28482850161496c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6149ed826149ab565b6149f781856149b5565b9350614a078185602086016149c5565b614a10816149d3565b840191505092915050565b5f6020820190508181035f830152614a3381846149e3565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614a6482614a3b565b9050919050565b614a7481614a5a565b82525050565b5f602082019050614a8d5f830184614a6b565b92915050565b614a9c81614a5a565b8114614aa6575f80fd5b50565b5f81359050614ab781614a93565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614afb826149d3565b810181811067ffffffffffffffff82111715614b1a57614b19614ac5565b5b80604052505050565b5f614b2c614861565b9050614b388282614af2565b919050565b5f67ffffffffffffffff821115614b5757614b56614ac5565b5b614b60826149d3565b9050602081019050919050565b828183375f83830152505050565b5f614b8d614b8884614b3d565b614b23565b905082815260208101848484011115614ba957614ba8614ac1565b5b614bb4848285614b6d565b509392505050565b5f82601f830112614bd057614bcf614abd565b5b8135614be0848260208601614b7b565b91505092915050565b5f805f8060808587031215614c0157614c0061486a565b5b5f614c0e87828801614aa9565b9450506020614c1f87828801614aa9565b9350506040614c308782880161496c565b925050606085013567ffffffffffffffff811115614c5157614c5061486e565b5b614c5d87828801614bbc565b91505092959194509250565b614c7281614872565b82525050565b5f602082019050614c8b5f830184614c69565b92915050565b5f67ffffffffffffffff821115614cab57614caa614ac5565b5b602082029050602081019050919050565b5f80fd5b5f614cd2614ccd84614c91565b614b23565b90508083825260208201905060208402830185811115614cf557614cf4614cbc565b5b835b81811015614d1e5780614d0a8882614aa9565b845260208401935050602081019050614cf7565b5050509392505050565b5f82601f830112614d3c57614d3b614abd565b5b8135614d4c848260208601614cc0565b91505092915050565b5f67ffffffffffffffff821115614d6f57614d6e614ac5565b5b602082029050602081019050919050565b5f614d92614d8d84614d55565b614b23565b90508083825260208201905060208402830185811115614db557614db4614cbc565b5b835b81811015614dde5780614dca888261496c565b845260208401935050602081019050614db7565b5050509392505050565b5f82601f830112614dfc57614dfb614abd565b5b8135614e0c848260208601614d80565b91505092915050565b5f67ffffffffffffffff821115614e2f57614e2e614ac5565b5b602082029050602081019050919050565b5f614e52614e4d84614e15565b614b23565b90508083825260208201905060208402830185811115614e7557614e74614cbc565b5b835b81811015614ebc57803567ffffffffffffffff811115614e9a57614e99614abd565b5b808601614ea78982614bbc565b85526020850194505050602081019050614e77565b5050509392505050565b5f82601f830112614eda57614ed9614abd565b5b8135614eea848260208601614e40565b91505092915050565b5f819050919050565b614f0581614ef3565b8114614f0f575f80fd5b50565b5f81359050614f2081614efc565b92915050565b5f805f8060808587031215614f3e57614f3d61486a565b5b5f85013567ffffffffffffffff811115614f5b57614f5a61486e565b5b614f6787828801614d28565b945050602085013567ffffffffffffffff811115614f8857614f8761486e565b5b614f9487828801614de8565b935050604085013567ffffffffffffffff811115614fb557614fb461486e565b5b614fc187828801614ec6565b9250506060614fd287828801614f12565b91505092959194509250565b614fe781614ef3565b82525050565b5f6020820190506150005f830184614fde565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6008811061504457615043615006565b5b50565b5f81905061505482615033565b919050565b5f61506382615047565b9050919050565b61507381615059565b82525050565b5f60208201905061508c5f83018461506a565b92915050565b5f80604083850312156150a8576150a761486a565b5b5f6150b58582860161496c565b92505060206150c685828601614aa9565b9150509250929050565b5f6060820190506150e35f83018661492e565b6150f0602083018561492e565b6150fd604083018461492e565b949350505050565b5f60ff82169050919050565b61511a81615105565b8114615124575f80fd5b50565b5f8135905061513581615111565b92915050565b5f80604083850312156151515761515061486a565b5b5f61515e8582860161496c565b925050602061516f85828601615127565b9150509250929050565b5f80fd5b5f8083601f84011261519257615191614abd565b5b8235905067ffffffffffffffff8111156151af576151ae615179565b5b6020830191508360018202830111156151cb576151ca614cbc565b5b9250929050565b5f805f805f805f60c0888a0312156151ed576151ec61486a565b5b5f6151fa8a828b0161496c565b975050602061520b8a828b01615127565b965050604061521c8a828b01614aa9565b955050606088013567ffffffffffffffff81111561523d5761523c61486e565b5b6152498a828b0161517d565b9450945050608088013567ffffffffffffffff81111561526c5761526b61486e565b5b6152788a828b01614bbc565b92505060a088013567ffffffffffffffff8111156152995761529861486e565b5b6152a58a828b01614bbc565b91505092959891949750929550565b5f805f805f608086880312156152cd576152cc61486a565b5b5f6152da8882890161496c565b95505060206152eb88828901615127565b945050604086013567ffffffffffffffff81111561530c5761530b61486e565b5b6153188882890161517d565b9350935050606086013567ffffffffffffffff81111561533b5761533a61486e565b5b61534788828901614bbc565b9150509295509295909350565b5f65ffffffffffff82169050919050565b61536e81615354565b8114615378575f80fd5b50565b5f8135905061538981615365565b92915050565b5f602082840312156153a4576153a361486a565b5b5f6153b18482850161537b565b91505092915050565b5f805f80606085870312156153d2576153d161486a565b5b5f6153df8782880161496c565b94505060206153f087828801615127565b935050604085013567ffffffffffffffff8111156154115761541061486e565b5b61541d8782880161517d565b925092505092959194509250565b5f67ffffffffffffffff82111561544557615444614ac5565b5b61544e826149d3565b9050602081019050919050565b5f61546d6154688461542b565b614b23565b90508281526020810184848401111561548957615488614ac1565b5b615494848285614b6d565b509392505050565b5f82601f8301126154b0576154af614abd565b5b81356154c084826020860161545b565b91505092915050565b5f805f80608085870312156154e1576154e061486a565b5b5f85013567ffffffffffffffff8111156154fe576154fd61486e565b5b61550a87828801614d28565b945050602085013567ffffffffffffffff81111561552b5761552a61486e565b5b61553787828801614de8565b935050604085013567ffffffffffffffff8111156155585761555761486e565b5b61556487828801614ec6565b925050606085013567ffffffffffffffff8111156155855761558461486e565b5b6155918782880161549c565b91505092959194509250565b5f602082840312156155b2576155b161486a565b5b5f6155bf84828501614aa9565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6155fc816155c8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61563481614925565b82525050565b5f615645838361562b565b60208301905092915050565b5f602082019050919050565b5f61566782615602565b615671818561560c565b935061567c8361561c565b805f5b838110156156ac578151615693888261563a565b975061569e83615651565b92505060018101905061567f565b5085935050505092915050565b5f60e0820190506156cc5f83018a6155f3565b81810360208301526156de81896149e3565b905081810360408301526156f281886149e3565b9050615701606083018761492e565b61570e6080830186614a6b565b61571b60a0830185614fde565b81810360c083015261572d818461565d565b905098975050505050505050565b5f805f80608085870312156157535761575261486a565b5b5f6157608782880161496c565b945050602061577187828801615127565b935050604061578287828801614aa9565b925050606085013567ffffffffffffffff8111156157a3576157a261486e565b5b6157af87828801614bbc565b91505092959194509250565b6157c481615354565b82525050565b5f6020820190506157dd5f8301846157bb565b92915050565b5f805f606084860312156157fa576157f961486a565b5b5f61580786828701614aa9565b93505060206158188682870161496c565b925050604084013567ffffffffffffffff8111156158395761583861486e565b5b61584586828701614bbc565b9150509250925092565b5f61585982614a3b565b9050919050565b5f61586a8261584f565b9050919050565b61587a81615860565b8114615884575f80fd5b50565b5f8135905061589581615871565b92915050565b5f602082840312156158b0576158af61486a565b5b5f6158bd84828501615887565b91505092915050565b5f805f805f60a086880312156158df576158de61486a565b5b5f6158ec88828901614aa9565b95505060206158fd88828901614aa9565b945050604086013567ffffffffffffffff81111561591e5761591d61486e565b5b61592a88828901614de8565b935050606086013567ffffffffffffffff81111561594b5761594a61486e565b5b61595788828901614de8565b925050608086013567ffffffffffffffff8111156159785761597761486e565b5b61598488828901614bbc565b9150509295509295909350565b5f8083601f8401126159a6576159a5614abd565b5b8235905067ffffffffffffffff8111156159c3576159c2615179565b5b6020830191508360018202830111156159df576159de614cbc565b5b9250929050565b5f805f80606085870312156159fe576159fd61486a565b5b5f615a0b87828801614aa9565b9450506020615a1c8782880161496c565b935050604085013567ffffffffffffffff811115615a3d57615a3c61486e565b5b615a4987828801615991565b925092505092959194509250565b5f63ffffffff82169050919050565b615a6f81615a57565b8114615a79575f80fd5b50565b5f81359050615a8a81615a66565b92915050565b5f60208284031215615aa557615aa461486a565b5b5f615ab284828501615a7c565b91505092915050565b5f8060408385031215615ad157615ad061486a565b5b5f615ade85828601614aa9565b9250506020615aef8582860161496c565b9150509250929050565b5f805f805f60a08688031215615b1257615b1161486a565b5b5f615b1f88828901614aa9565b9550506020615b3088828901614aa9565b9450506040615b418882890161496c565b9350506060615b528882890161496c565b925050608086013567ffffffffffffffff811115615b7357615b7261486e565b5b615b7f88828901614bbc565b9150509295509295909350565b5f819050919050565b5f615baf615baa615ba584614a3b565b615b8c565b614a3b565b9050919050565b5f615bc082615b95565b9050919050565b5f615bd182615bb6565b9050919050565b615be181615bc7565b82525050565b5f602082019050615bfa5f830184615bd8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680615c4457607f821691505b602082108103615c5757615c56615c00565b5b50919050565b5f615c77615c72615c6d84615354565b615b8c565b614925565b9050919050565b615c8781615c5d565b82525050565b5f604082019050615ca05f83018561492e565b615cad6020830184615c7e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f615cf3615cee8461542b565b614b23565b905082815260208101848484011115615d0f57615d0e614ac1565b5b615d1a8482856149c5565b509392505050565b5f82601f830112615d3657615d35614abd565b5b8151615d46848260208601615ce1565b91505092915050565b5f60208284031215615d6457615d6361486a565b5b5f82015167ffffffffffffffff811115615d8157615d8061486e565b5b615d8d84828501615d22565b91505092915050565b5f81905092915050565b5f615dab8385615d96565b9350615db8838584614b6d565b82840190509392505050565b5f615dd0828486615da0565b91508190509392505050565b615de581615105565b82525050565b5f60e082019050615dfe5f83018a614fde565b615e0b602083018961492e565b615e186040830188615ddc565b615e256060830187614a6b565b615e32608083018661492e565b615e3f60a0830185614fde565b615e4c60c0830184614fde565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f615e8f82614925565b9150615e9a83614925565b9250828203905081811115615eb257615eb1615e58565b5b92915050565b5f615ec282615354565b9150615ecd83615354565b9250828203905065ffffffffffff811115615eeb57615eea615e58565b5b92915050565b5f606082019050615f045f830186614a6b565b615f11602083018561492e565b615f1e604083018461492e565b949350505050565b5f60a082019050615f395f830188614fde565b615f46602083018761492e565b615f536040830186615ddc565b615f606060830185614a6b565b615f6d608083018461492e565b9695505050505050565b5f81519050615f8581615365565b92915050565b5f60208284031215615fa057615f9f61486a565b5b5f615fad84828501615f77565b91505092915050565b5f615fc082615354565b9150615fcb83615354565b9250828201905065ffffffffffff811115615fe957615fe8615e58565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61602181614a5a565b82525050565b5f6160328383616018565b60208301905092915050565b5f602082019050919050565b5f61605482615fef565b61605e8185615ff9565b935061606983616009565b805f5b838110156160995781516160808882616027565b975061608b8361603e565b92505060018101905061606c565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6160f3826160cf565b6160fd81856160d9565b935061610d8185602086016149c5565b616116816149d3565b840191505092915050565b5f61612c83836160e9565b905092915050565b5f602082019050919050565b5f61614a826160a6565b61615481856160b0565b935083602082028501616166856160c0565b805f5b858110156161a157848403895281516161828582616121565b945061618d83616134565b925060208a01995050600181019050616169565b50829750879550505050505092915050565b5f6080820190508181035f8301526161cb818761604a565b905081810360208301526161df818661565d565b905081810360408301526161f38185616140565b90506162026060830184614fde565b95945050505050565b5f60408201905061621e5f83018561492e565b61622b602083018461492e565b9392505050565b5f6060820190506162455f83018661492e565b616252602083018561506a565b61625f6040830184614fde565b949350505050565b616270816148f2565b811461627a575f80fd5b50565b5f8151905061628b81616267565b92915050565b5f602082840312156162a6576162a561486a565b5b5f6162b38482850161627d565b91505092915050565b5f6080820190506162cf5f83018761492e565b6162dc6020830186615ddc565b6162e9604083018561492e565b81810360608301526162fb81846149e3565b905095945050505050565b5f82825260208201905092915050565b5f616320826160cf565b61632a8185616306565b935061633a8185602086016149c5565b616343816149d3565b840191505092915050565b5f60a0820190506163615f83018861492e565b61636e6020830187615ddc565b61637b604083018661492e565b818103606083015261638d81856149e3565b905081810360808301526163a18184616316565b90509695505050505050565b5f819050919050565b5f6163d06163cb6163c6846163ad565b615b8c565b615105565b9050919050565b6163e0816163b6565b82525050565b5f6040820190506163f95f8301856163d7565b616406602083018461492e565b9392505050565b5f61641782614925565b915061642283614925565b925082820190508082111561643a57616439615e58565b5b92915050565b5f6040820190506164535f830185615c7e565b6164606020830184615c7e565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6164aa826149ab565b6164b48185616490565b93506164c48185602086016149c5565b6164cd816149d3565b840191505092915050565b5f6164e383836164a0565b905092915050565b5f602082019050919050565b5f61650182616467565b61650b8185616471565b93508360208202850161651d85616481565b805f5b85811015616558578484038952815161653985826164d8565b9450616544836164eb565b925060208a01995050600181019050616520565b50829750879550505050505092915050565b5f6101208201905061657e5f83018c61492e565b61658b602083018b614a6b565b818103604083015261659d818a61604a565b905081810360608301526165b1818961565d565b905081810360808301526165c581886164f7565b905081810360a08301526165d98187616140565b90506165e860c083018661492e565b6165f560e083018561492e565b81810361010083015261660881846149e3565b90509a9950505050505050505050565b5f60408201905061662b5f830185614a6b565b616638602083018461492e565b9392505050565b5f8151905061664d81614956565b92915050565b5f602082840312156166685761666761486a565b5b5f6166758482850161663f565b91505092915050565b5f6040820190506166915f830185614a6b565b61669e6020830184614a6b565b9392505050565b5f819050919050565b5f6166c86166c36166be846166a5565b615b8c565b614925565b9050919050565b6166d8816166ae565b82525050565b5f6020820190506166f15f8301846166cf565b92915050565b5f61671161670c61670784615a57565b615b8c565b614925565b9050919050565b616721816166f7565b82525050565b5f60408201905061673a5f830185616718565b6167476020830184616718565b9392505050565b5f61675882614925565b915061676383614925565b925082820261677181614925565b9150828204841483151761678857616787615e58565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6167c682614925565b91506167d183614925565b9250826167e1576167e061678f565b5b828204905092915050565b5f819050919050565b5f61680f61680a616805846167ec565b615b8c565b615105565b9050919050565b61681f816167f5565b82525050565b5f6040820190506168385f830185616816565b616845602083018461492e565b9392505050565b5f815f1b9050919050565b5f61687161686c616867846166a5565b61684c565b614ef3565b9050919050565b61688181616857565b82525050565b5f60a0820190508181035f83015261689f818861604a565b905081810360208301526168b3818761565d565b905081810360408301526168c78186616140565b90506168d66060830185616878565b6168e36080830184614fde565b9695505050505050565b5f815190506168fb81614efc565b92915050565b5f602082840312156169165761691561486a565b5b5f616923848285016168ed565b91505092915050565b5f60c0820190508181035f830152616944818961604a565b90508181036020830152616958818861565d565b9050818103604083015261696c8187616140565b905061697b6060830186616878565b6169886080830185614fde565b61699560a083018461492e565b979650505050505050565b5f6040820190506169b35f830185614fde565b81810360208301526169c58184616316565b90509392505050565b5f6169d8826160cf565b6169e28185615d96565b93506169f28185602086016149c5565b80840191505092915050565b5f616a0982846169ce565b915081905092915050565b5f819050919050565b5f616a37616a32616a2d84616a14565b615b8c565b615105565b9050919050565b616a4781616a1d565b82525050565b5f604082019050616a605f830185616a3e565b616a6d602083018461492e565b9392505050565b5f616a7e82615105565b9150616a8983615105565b9250828201905060ff811115616aa257616aa1615e58565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115616afd57808604811115616ad957616ad8615e58565b5b6001851615616ae85780820291505b8081029050616af685616aa8565b9450616abd565b94509492505050565b5f82616b155760019050616bd0565b81616b22575f9050616bd0565b8160018114616b385760028114616b4257616b71565b6001915050616bd0565b60ff841115616b5457616b53615e58565b5b8360020a915084821115616b6b57616b6a615e58565b5b50616bd0565b5060208310610133831016604e8410600b8410161715616ba65782820a905083811115616ba157616ba0615e58565b5b616bd0565b616bb38484846001616ab4565b92509050818404811115616bca57616bc9615e58565b5b81810290505b9392505050565b5f616be182614925565b9150616bec83615105565b9250616c197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484616b06565b905092915050565b5f60a082019050616c345f830188614fde565b616c416020830187614fde565b616c4e6040830186614fde565b616c5b606083018561492e565b616c686080830184614a6b565b9695505050505050565b5f608082019050616c855f830187614fde565b616c926020830186615ddc565b616c9f6040830185614fde565b616cac6060830184614fde565b9594505050505056fea264697066735822122026365c024e462ebeb7f76526307aa5fbc02335be98d5268e2625e95acfaaa48b64736f6c634300081a0033" - }, - "settings": { - "compilationTarget": { - "contracts/Dao.sol": "HomebaseDAO" - }, - "evmVersion": "shanghai", - "libraries": {}, - "metadata": { - "bytecodeHash": "ipfs" - }, - "optimizer": { - "enabled": true, - "runs": 200 - }, - "remappings": [] - }, - "sources": { - "@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "license": "MIT", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ] - }, - "@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41", - "license": "MIT", - "urls": [ - "bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26", - "dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH" - ] - }, - "@openzeppelin/contracts/governance/Governor.sol": { - "keccak256": "0x9a6dc5abbb0b6415e343956d2a5f1a89251d5b4937ebcc4f0ffa17fec35a2149", - "license": "MIT", - "urls": [ - "bzz-raw://8e3ceb0f102494cb4547b2c460f81d8f23239db10e1ff3f97770adeb9d17d6e1", - "dweb:/ipfs/QmZ1xxtnTNFZ8M9vrvScY1YQAGAFMVGgsDoeWibS7sRzxD" - ] - }, - "@openzeppelin/contracts/governance/IGovernor.sol": { - "keccak256": "0x0a6c99ff573c20b62b8c568282517664e6d55000d4302aad10c668c97c0d2e0e", - "license": "MIT", - "urls": [ - "bzz-raw://66f355c55b1a366f831f7f912e1dffb16c15a4637d03f0c22cf335a5613856b6", - "dweb:/ipfs/QmPJMYLeuJsSHnBumMgxdtitNMagxexkP7UwCJq5ygxvQQ" - ] - }, - "@openzeppelin/contracts/governance/TimelockController.sol": { - "keccak256": "0x50ea4919331ca84a89c44be1e1fdecd597c7f5575c3d93f582197db97171c2c9", - "license": "MIT", - "urls": [ - "bzz-raw://a80401f75260f9f42440c05baee0d2ff7cdd1e1e451400000eabb9c901abe383", - "dweb:/ipfs/QmVdWjwkxmWrxcmz6ffmC8nCLwj5ixKrgWF7mKERdkZSfR" - ] - }, - "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol": { - "keccak256": "0x5c9ef54955aadafa3bac0ee7c40b2f1a164b4f3c2a72e1cb52043f664a85c15c", - "license": "MIT", - "urls": [ - "bzz-raw://2e016de12aa6a756541c7a7bf39a72d27dc112b251806d03efd24f86ff13732f", - "dweb:/ipfs/QmX8aoCruyuvMDH9r6uTCg4qTdqhbdFMdM5Z8Lxrtae8oT" - ] - }, - "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol": { - "keccak256": "0x1e0810708b8f5de8d3db73240ccee2d36a305cb904aa5acd4588834ebce6acce", - "license": "MIT", - "urls": [ - "bzz-raw://9758197a4d3cb1aa3036a9bd0edbf34a2eba82e484d3d519da495e495d752dee", - "dweb:/ipfs/QmYtV61Sp55bfcW4DZvsRuDo2EKb5PekqoY3nx5STJn6Zt" - ] - }, - "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol": { - "keccak256": "0x14e3ca2567cb0fc75ee2415931a495e4eb9b2a9edd261d3ebd9dd6c0df775711", - "license": "MIT", - "urls": [ - "bzz-raw://7dc5a48cb3df6a0f40f4fb1e1b61f4252924019448a948b2a2716e66b39dd1a6", - "dweb:/ipfs/QmdcYiYhQwFYGDC1w8ypo6gEgpkJ8NpKtixofQqUpYZZ9b" - ] - }, - "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol": { - "keccak256": "0x3ac80e86633701fd0675df10770877da0cab60fb041553ddbc78c431e4a7c3cc", - "license": "MIT", - "urls": [ - "bzz-raw://28acdbbe336d814144cacf1be1f2423252b494baa25d9c7cc6390a4b6348d1f2", - "dweb:/ipfs/QmXvrHzPXV8UWwp1crzDpfPLvdyfj9PKoF5acP6utkhmFs" - ] - }, - "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol": { - "keccak256": "0x5b5cdb361ed018c0162942d673c17e187c1a52ded2ce4f41e8a3f3f5d1656e00", - "license": "MIT", - "urls": [ - "bzz-raw://fd78b11b946d9001725a38844f1d6163906965ec321e1b09bd7e476baedc5d12", - "dweb:/ipfs/QmPgTnTYDbgXgwHXbkxofSH51QDFfycwx1tn8Qj5hGGk5u" - ] - }, - "@openzeppelin/contracts/governance/utils/IVotes.sol": { - "keccak256": "0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947", - "license": "MIT", - "urls": [ - "bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856", - "dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2" - ] - }, - "@openzeppelin/contracts/interfaces/IERC1271.sol": { - "keccak256": "0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39", - "license": "MIT", - "urls": [ - "bzz-raw://c3c74009ce36136b36c77c23935b8e4a7b4f253be2da2be4fb4a916b1ce43743", - "dweb:/ipfs/QmcH36v3iN7SJJuF73AunLR2LtNxhVJ1wm63ph4dPZ4pcL" - ] - }, - "@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "license": "MIT", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ] - }, - "@openzeppelin/contracts/interfaces/IERC5267.sol": { - "keccak256": "0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92", - "license": "MIT", - "urls": [ - "bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a", - "dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP" - ] - }, - "@openzeppelin/contracts/interfaces/IERC5805.sol": { - "keccak256": "0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818", - "license": "MIT", - "urls": [ - "bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a", - "dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2" - ] - }, - "@openzeppelin/contracts/interfaces/IERC6372.sol": { - "keccak256": "0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33", - "license": "MIT", - "urls": [ - "bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb", - "dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn" - ] - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { - "keccak256": "0xb69597a63b202e28401128bed6a6d259e8730191274471af7303eafb247881a3", - "license": "MIT", - "urls": [ - "bzz-raw://25addbda49a578b3318130585601344c5149a5549d749adf88e9685349a46b23", - "dweb:/ipfs/Qme2DuD8gpsve1ZvaSMQpBwMdpU7yAtekDwr7gUp8dX4zX" - ] - }, - "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol": { - "keccak256": "0xc26cd2e2bcf59b87c986fc653545b35010db9c585a3f3312fe61d7b1b3805735", - "license": "MIT", - "urls": [ - "bzz-raw://46fe54b0ac3ee60bdff012fae7d13c1171dff433aa4fdd356fd06ce46fbe711b", - "dweb:/ipfs/QmTTm6jBY6jQ6fx1cnCT4YepEV2aQvqLme5TSxuidfpf2q" - ] - }, - "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "keccak256": "0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49", - "license": "MIT", - "urls": [ - "bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22", - "dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i" - ] - }, - "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol": { - "keccak256": "0xaad20f8713b5cd98114278482d5d91b9758f9727048527d582e8e88fd4901fd8", - "license": "MIT", - "urls": [ - "bzz-raw://5396e8dbb000c2fada59b7d2093b9c7c870fd09413ab0fdaba45d882959c6244", - "dweb:/ipfs/QmXQn5XckSiUsUBpMYuiFeqnojRX4rKa9jmgjCPeTuPmhh" - ] - }, - "@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721", - "license": "MIT", - "urls": [ - "bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245", - "dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y" - ] - }, - "@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "license": "MIT", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ] - }, - "@openzeppelin/contracts/utils/Nonces.sol": { - "keccak256": "0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f", - "license": "MIT", - "urls": [ - "bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e", - "dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ" - ] - }, - "@openzeppelin/contracts/utils/ShortStrings.sol": { - "keccak256": "0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6", - "license": "MIT", - "urls": [ - "bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c", - "dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA" - ] - }, - "@openzeppelin/contracts/utils/StorageSlot.sol": { - "keccak256": "0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418", - "license": "MIT", - "urls": [ - "bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c", - "dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR" - ] - }, - "@openzeppelin/contracts/utils/Strings.sol": { - "keccak256": "0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792", - "license": "MIT", - "urls": [ - "bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453", - "dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i" - ] - }, - "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf", - "license": "MIT", - "urls": [ - "bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c", - "dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF" - ] - }, - "@openzeppelin/contracts/utils/cryptography/EIP712.sol": { - "keccak256": "0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0", - "license": "MIT", - "urls": [ - "bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21", - "dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt" - ] - }, - "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { - "keccak256": "0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435", - "license": "MIT", - "urls": [ - "bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c", - "dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX" - ] - }, - "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol": { - "keccak256": "0x6b11eb41a228cca35d4b662b4df69fcd75192851365102690f57b2ac01e83fe6", - "license": "MIT", - "urls": [ - "bzz-raw://ab006a2983ed350d2af21ddcdd835dcae3b8340086cc4d088460da5abd041f69", - "dweb:/ipfs/QmbEacDhkJZiGrgzLjB4pNtE8Z1uudjDw1DvcDUTVQFsLG" - ] - }, - "@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133", - "license": "MIT", - "urls": [ - "bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8", - "dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA" - ] - }, - "@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b", - "license": "MIT", - "urls": [ - "bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df", - "dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL" - ] - }, - "@openzeppelin/contracts/utils/math/Math.sol": { - "keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d", - "license": "MIT", - "urls": [ - "bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875", - "dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L" - ] - }, - "@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe", - "license": "MIT", - "urls": [ - "bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c", - "dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj" - ] - }, - "@openzeppelin/contracts/utils/math/SignedMath.sol": { - "keccak256": "0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72", - "license": "MIT", - "urls": [ - "bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc", - "dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT" - ] - }, - "@openzeppelin/contracts/utils/structs/Checkpoints.sol": { - "keccak256": "0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad", - "license": "MIT", - "urls": [ - "bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b", - "dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR" - ] - }, - "@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0xed6b702230a66640a0f1dd96106dd697e821b6b0fbb2eeab1c09d88d7c411a67", - "license": "MIT", - "urls": [ - "bzz-raw://766996a7c9fb936ae08fc451c6bf6c3a9b49aca26002fb76c7fd1833fca459d8", - "dweb:/ipfs/QmaFKhhPJCNxESLDoio7aR2KSvi4Y8YKirrb9tu4LM1vDp" - ] - }, - "@openzeppelin/contracts/utils/types/Time.sol": { - "keccak256": "0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58", - "license": "MIT", - "urls": [ - "bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111", - "dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb" - ] - }, - "contracts/Dao.sol": { - "keccak256": "0x48040ad90460a4a96ce52afdc9f1770d90110395bde9283f2e57d07e7bb107a4", - "license": "MIT", - "urls": [ - "bzz-raw://eb09814f0c3253bac4add6c634c9e9a69ef935b25b6e10b2395a68abf5e969ce", - "dweb:/ipfs/QmamHVNMP9HbSo7QGFkR5HfN72nJc8PRv5rBaWf6soEunb" - ] - } - }, - "version": 1 -} \ No newline at end of file + "_format": "hh-sol-artifact-1", + "contractName": "HomebaseDAO", + "sourceName": "contracts/Dao.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVotes", + "name": "_token", + "type": "address" + }, + { + "internalType": "contract TimelockController", + "name": "_timelock", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "uint48", + "name": "minsDelay", + "type": "uint48" + }, + { + "internalType": "uint32", + "name": "minsVoting", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "pThreshold", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "qvrm", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "CheckpointUnorderedInsertion", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "voter", + "type": "address" + } + ], + "name": "GovernorAlreadyCastVote", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "GovernorAlreadyQueuedProposal", + "type": "error" + }, + { + "inputs": [], + "name": "GovernorDisabledDeposit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "votes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "name": "GovernorInsufficientProposerVotes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "calldatas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "values", + "type": "uint256" + } + ], + "name": "GovernorInvalidProposalLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "quorumNumerator", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quorumDenominator", + "type": "uint256" + } + ], + "name": "GovernorInvalidQuorumFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "voter", + "type": "address" + } + ], + "name": "GovernorInvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "GovernorInvalidVoteType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "votingPeriod", + "type": "uint256" + } + ], + "name": "GovernorInvalidVotingPeriod", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "GovernorNonexistentProposal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "GovernorNotQueuedProposal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "GovernorOnlyExecutor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "GovernorOnlyProposer", + "type": "error" + }, + { + "inputs": [], + "name": "GovernorQueueNotImplemented", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "proposer", + "type": "address" + } + ], + "name": "GovernorRestrictedProposer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "enum IGovernor.ProposalState", + "name": "current", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "expectedStates", + "type": "bytes32" + } + ], + "name": "GovernorUnexpectedProposalState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "currentNonce", + "type": "uint256" + } + ], + "name": "InvalidAccountNonce", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [], + "name": "QueueEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "QueueFull", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "bits", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SafeCastOverflowedUintDowncast", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "ProposalCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "indexed": false, + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "voteStart", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "voteEnd", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "ProposalCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "ProposalExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "etaSeconds", + "type": "uint256" + } + ], + "name": "ProposalQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldProposalThreshold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newProposalThreshold", + "type": "uint256" + } + ], + "name": "ProposalThresholdSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldQuorumNumerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newQuorumNumerator", + "type": "uint256" + } + ], + "name": "QuorumNumeratorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldTimelock", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newTimelock", + "type": "address" + } + ], + "name": "TimelockChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "VoteCast", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "reason", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "params", + "type": "bytes" + } + ], + "name": "VoteCastWithParams", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldVotingDelay", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newVotingDelay", + "type": "uint256" + } + ], + "name": "VotingDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldVotingPeriod", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newVotingPeriod", + "type": "uint256" + } + ], + "name": "VotingPeriodSet", + "type": "event" + }, + { + "inputs": [], + "name": "BALLOT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "COUNTING_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "EXTENDED_BALLOT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + } + ], + "name": "cancel", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + } + ], + "name": "castVote", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "castVoteBySig", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "castVoteWithReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + }, + { + "internalType": "bytes", + "name": "params", + "type": "bytes" + } + ], + "name": "castVoteWithReasonAndParams", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + }, + { + "internalType": "bytes", + "name": "params", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "castVoteWithReasonAndParamsBySig", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "params", + "type": "bytes" + } + ], + "name": "getVotesWithParams", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasVoted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + } + ], + "name": "hashProposal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalDeadline", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalEta", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalNeedsQueuing", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalProposer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposalThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "againstVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "forVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "abstainVotes", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "propose", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + } + ], + "name": "queue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "quorum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumDenominator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "quorumNumerator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumNumerator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "relay", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newProposalThreshold", + "type": "uint256" + } + ], + "name": "setProposalThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "newVotingDelay", + "type": "uint48" + } + ], + "name": "setVotingDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "newVotingPeriod", + "type": "uint32" + } + ], + "name": "setVotingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum IGovernor.ProposalState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "timelock", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract IERC5805", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newQuorumNumerator", + "type": "uint256" + } + ], + "name": "updateQuorumNumerator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TimelockController", + "name": "newTimelock", + "type": "address" + } + ], + "name": "updateTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "votingDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "votingPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x6101806040523480156200001257600080fd5b5060405162004efe38038062004efe833981016040819052620000359162000812565b8560ff8216886200004887603c6200094f565b6200005587603c6200097c565b868a80620000776040805180820190915260018152603160f81b602082015290565b6200008482600062000193565b610120526200009581600162000193565b61014052815160208084019190912060e052815190820120610100524660a0526200012360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05260036200013a828262000a30565b5062000148905083620001cc565b620001538262000232565b6200015e81620002d9565b5050506001600160a01b03166101605262000179816200031a565b506200018581620003ba565b505050505050505062000b8a565b6000602083511015620001b357620001ab8362000423565b9050620001c6565b81620001c0848262000a30565b5060ff90505b92915050565b6008546040805165ffffffffffff928316815291831660208301527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a16008805465ffffffffffff191665ffffffffffff92909216919091179055565b8063ffffffff16600003620002625760405163f1cfbf0560e01b8152600060048201526024015b60405180910390fd5b6008546040805163ffffffff66010000000000009093048316815291831660208301527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a16008805463ffffffff90921666010000000000000263ffffffff60301b19909216919091179055565b60075460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600755565b606480821115620003495760405163243e544560e01b8152600481018390526024810182905260440162000259565b60006200035562000466565b90506200037a6200036562000482565b620003708562000504565b600a91906200053e565b505060408051828152602081018590527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a1505050565b600b54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600080829050601f8151111562000451578260405163305a27a960e01b815260040162000259919062000afc565b80516200045e8262000b31565b179392505050565b600062000474600a6200055b565b6001600160d01b0316905090565b60006200048f6101605190565b6001600160a01b03166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620004eb575060408051601f3d908101601f19168201909252620004e89181019062000b56565b60015b620004ff57620004fa620005ab565b905090565b919050565b60006001600160d01b038211156200053a576040516306dfcc6560e41b815260d060048201526024810183905260440162000259565b5090565b6000806200054e858585620005b8565b915091505b935093915050565b80546000908015620005a15762000587836200057960018462000b74565b600091825260209091200190565b54660100000000000090046001600160d01b0316620005a4565b60005b9392505050565b6000620004fa436200074a565b825460009081908015620006eb576000620005da876200057960018562000b74565b60408051808201909152905465ffffffffffff80821680845266010000000000009092046001600160d01b0316602084015291925090871610156200063257604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff80881691160362000686578462000659886200057960018662000b74565b80546001600160d01b039290921666010000000000000265ffffffffffff909216919091179055620006da565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d815291909120945191519092166601000000000000029216919091179101555b602001519250839150620005539050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316660100000000000002919093161792019190915590508162000553565b600065ffffffffffff8211156200053a576040516306dfcc6560e41b8152603060048201526024810183905260440162000259565b6001600160a01b03811681146200079557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620007cb578181015183820152602001620007b1565b50506000910152565b805165ffffffffffff81168114620004ff57600080fd5b805163ffffffff81168114620004ff57600080fd5b805160ff81168114620004ff57600080fd5b600080600080600080600060e0888a0312156200082e57600080fd5b87516200083b816200077f565b60208901519097506200084e816200077f565b60408901519096506001600160401b03808211156200086c57600080fd5b818a0191508a601f8301126200088157600080fd5b81518181111562000896576200089662000798565b604051601f8201601f19908116603f01168101908382118183101715620008c157620008c162000798565b816040528281528d6020848701011115620008db57600080fd5b620008ee836020830160208801620007ae565b80995050505050506200090460608901620007d4565b93506200091460808901620007eb565b925060a088015191506200092b60c0890162000800565b905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b65ffffffffffff81811683821602808216919082811462000974576200097462000939565b505092915050565b63ffffffff81811683821602808216919082811462000974576200097462000939565b600181811c90821680620009b457607f821691505b602082108103620009d557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a2b576000816000526020600020601f850160051c8101602086101562000a065750805b601f850160051c820191505b8181101562000a275782815560010162000a12565b5050505b505050565b81516001600160401b0381111562000a4c5762000a4c62000798565b62000a648162000a5d84546200099f565b84620009db565b602080601f83116001811462000a9c576000841562000a835750858301515b600019600386901b1c1916600185901b17855562000a27565b600085815260208120601f198616915b8281101562000acd5788860151825594840194600190910190840162000aac565b508582101562000aec5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602081526000825180602084015262000b1d816040850160208701620007ae565b601f01601f19169190910160400192915050565b80516020808301519190811015620009d55760001960209190910360031b1b16919050565b60006020828403121562000b6957600080fd5b620005a482620007d4565b81810381811115620001c657620001c662000939565b60805160a05160c05160e051610100516101205161014051610160516142f262000c0c600039600081816109de01528181610e48015281816113a301528181611ff4015261224e01526000611fbf01526000611f92015260006128820152600061285a015260006127b5015260006127df0152600061280901526142f26000f3fe6080604052600436106102975760003560e01c80637ecebe001161015a578063c01f9e37116100c1578063e540d01d1161007a578063e540d01d1461092f578063eb9019d41461094f578063ece40cc11461096f578063f23a6e611461098f578063f8ce560a146109af578063fc0c546a146109cf57600080fd5b8063c01f9e3714610844578063c28bc2fa14610864578063c59057e414610877578063d33219b414610897578063dd4e2ba5146108b5578063deaaa7cc146108fb57600080fd5b8063a7713a7011610113578063a7713a7014610782578063a890c91014610797578063a9a95294146107b7578063ab58fb8e146107d7578063b58131b01461080f578063bc197c811461082457600080fd5b80637ecebe00146106a457806384b0196e146106da5780638ff262e31461070257806391ddadf41461072257806397c3d3341461074e5780639a802a6d1461076257600080fd5b806343859632116101fe5780635b8d0e0d116101b75780635b8d0e0d146105e45780635f398a141461060457806360c4247f1461062457806379051887146106445780637b3c71d3146106645780637d5e81e21461068457600080fd5b806343859632146104c6578063452115d6146105105780634bf5d7e914610530578063544ffc9c1461054557806354fd4d501461059a57806356781388146105c457600080fd5b8063160cbed711610250578063160cbed7146103fd5780632656227d1461041d5780632d63f693146104305780632fe3e261146104505780633932abb1146104845780633e4f49e61461049957600080fd5b806301ffc9a7146102d357806302a251a31461030857806306f3f9e61461033457806306fdde0314610354578063143489d014610376578063150b7a02146103c457600080fd5b366102ce57306102a5610a02565b6001600160a01b0316146102cc57604051637485328f60e11b815260040160405180910390fd5b005b600080fd5b3480156102df57600080fd5b506102f36102ee36600461323a565b610a1b565b60405190151581526020015b60405180910390f35b34801561031457600080fd5b50600854600160301b900463ffffffff165b6040519081526020016102ff565b34801561034057600080fd5b506102cc61034f366004613264565b610a6d565b34801561036057600080fd5b50610369610a81565b6040516102ff91906132cd565b34801561038257600080fd5b506103ac610391366004613264565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016102ff565b3480156103d057600080fd5b506103e46103df3660046133c0565b610b13565b6040516001600160e01b031990911681526020016102ff565b34801561040957600080fd5b5061032661041836600461359f565b610b56565b61032661042b36600461359f565b610c25565b34801561043c57600080fd5b5061032661044b366004613264565b610d91565b34801561045c57600080fd5b506103267f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a81181565b34801561049057600080fd5b50610326610db2565b3480156104a557600080fd5b506104b96104b4366004613264565b610dc5565b6040516102ff9190613666565b3480156104d257600080fd5b506102f36104e1366004613674565b60008281526009602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b34801561051c57600080fd5b5061032661052b36600461359f565b610dd0565b34801561053c57600080fd5b50610369610e44565b34801561055157600080fd5b5061057f610560366004613264565b6000908152600960205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016102ff565b3480156105a657600080fd5b506040805180820190915260018152603160f81b6020820152610369565b3480156105d057600080fd5b506103266105df3660046136b5565b610f06565b3480156105f057600080fd5b506103266105ff366004613729565b610f2f565b34801561061057600080fd5b5061032661061f3660046137e3565b61108e565b34801561063057600080fd5b5061032661063f366004613264565b6110e3565b34801561065057600080fd5b506102cc61065f36600461387a565b611171565b34801561067057600080fd5b5061032661067f366004613897565b611182565b34801561069057600080fd5b5061032661069f3660046138f0565b6111ca565b3480156106b057600080fd5b506103266106bf3660046139a4565b6001600160a01b031660009081526002602052604090205490565b3480156106e657600080fd5b506106ef611287565b6040516102ff97969594939291906139fd565b34801561070e57600080fd5b5061032661071d366004613a6d565b6112cd565b34801561072e57600080fd5b5061073761139f565b60405165ffffffffffff90911681526020016102ff565b34801561075a57600080fd5b506064610326565b34801561076e57600080fd5b5061032661077d366004613abe565b611427565b34801561078e57600080fd5b50610326611434565b3480156107a357600080fd5b506102cc6107b23660046139a4565b61144e565b3480156107c357600080fd5b506102f36107d2366004613264565b61145f565b3480156107e357600080fd5b506103266107f2366004613264565b60009081526004602052604090206001015465ffffffffffff1690565b34801561081b57600080fd5b50610326611468565b34801561083057600080fd5b506103e461083f366004613b16565b611473565b34801561085057600080fd5b5061032661085f366004613264565b6114b7565b6102cc610872366004613ba9565b6114fa565b34801561088357600080fd5b5061032661089236600461359f565b61157a565b3480156108a357600080fd5b50600b546001600160a01b03166103ac565b3480156108c157600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e90820152610369565b34801561090757600080fd5b506103267ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d781565b34801561093b57600080fd5b506102cc61094a366004613bec565b6115b4565b34801561095b57600080fd5b5061032661096a366004613c12565b6115c5565b34801561097b57600080fd5b506102cc61098a366004613264565b6115ed565b34801561099b57600080fd5b506103e46109aa366004613c3e565b6115fe565b3480156109bb57600080fd5b506103266109ca366004613264565b611642565b3480156109db57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103ac565b6000610a16600b546001600160a01b031690565b905090565b60006001600160e01b031982166332a2ad4360e11b1480610a4c57506001600160e01b03198216630271189760e51b145b80610a6757506301ffc9a760e01b6001600160e01b03198316145b92915050565b610a7561164d565b610a7e816116c7565b50565b606060038054610a9090613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90613ca6565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b600030610b1e610a02565b6001600160a01b031614610b4557604051637485328f60e11b815260040160405180910390fd5b50630a85bd0160e11b949350505050565b600080610b658686868661157a565b9050610b7a81610b75600461175d565b611780565b506000610b8a82888888886117bf565b905065ffffffffffff811615610c0257600082815260046020908152604091829020600101805465ffffffffffff191665ffffffffffff85169081179091558251858152918201527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892910160405180910390a1610c1b565b604051634844252360e11b815260040160405180910390fd5b5095945050505050565b600080610c348686868661157a565b9050610c5481610c44600561175d565b610c4e600461175d565b17611780565b506000818152600460205260409020805460ff60f01b1916600160f01b17905530610c7d610a02565b6001600160a01b031614610d075760005b8651811015610d0557306001600160a01b0316878281518110610cb357610cb3613ce0565b60200260200101516001600160a01b031603610cfd57610cfd858281518110610cde57610cde613ce0565b60200260200101518051906020012060056117ce90919063ffffffff16565b600101610c8e565b505b610d14818787878761183f565b30610d1d610a02565b6001600160a01b031614158015610d4957506005546001600160801b03808216600160801b9092041614155b15610d545760006005555b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906020015b60405180910390a195945050505050565b600090815260046020526040902054600160a01b900465ffffffffffff1690565b6000610a1660085465ffffffffffff1690565b6000610a6782611853565b600080610ddf8686868661157a565b9050610def81610b75600061175d565b506000818152600460205260409020546001600160a01b03163314610e2e5760405163233d98e360e01b81523360048201526024015b60405180910390fd5b610e3a86868686611992565b9695505050505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634bf5d7e96040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610ec557506040513d6000823e601f3d908101601f19168201604052610ec29190810190613cf6565b60015b610f01575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b600080339050610f27848285604051806020016040528060008152506119a9565b949350505050565b6000806110128761100c7f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a8118c8c8c610f848e6001600160a01b0316600090815260026020526040902080546001810190915590565b8d8d604051610f94929190613d63565b60405180910390208c80519060200120604051602001610ff19796959493929190968752602087019590955260ff9390931660408601526001600160a01b03919091166060850152608084015260a083015260c082015260e00190565b604051602081830303815290604052805190602001206119cc565b856119f9565b90508061103d576040516394ab6c0760e01b81526001600160a01b0388166004820152602401610e25565b61108189888a89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250611a51915050565b9998505050505050505050565b6000803390506110d887828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611a51915050565b979650505050505050565b600a805460009182906110f7600184613d89565b8154811061110757611107613ce0565b6000918252602090912001805490915065ffffffffffff811690600160301b90046001600160d01b031685821161114a576001600160d01b031695945050505050565b61115e61115687611b2e565b600a90611b65565b6001600160d01b03169695505050505050565b61117961164d565b610a7e81611c1a565b600080339050610e3a86828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a992505050565b6000336111d78184611c80565b6111ff5760405163d9b3955760e01b81526001600160a01b0382166004820152602401610e25565b600061122682600161120f61139f565b6112199190613d9c565b65ffffffffffff166115c5565b90506000611232611468565b90508082101561126e57604051636121770b60e11b81526001600160a01b03841660048201526024810183905260448101829052606401610e25565b61127b8888888887611d6b565b98975050505050505050565b60006060806000806000606061129b611f8b565b6112a3611fb8565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000806113598461100c7ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d78989896113228b6001600160a01b0316600090815260026020526040902080546001810190915590565b60408051602081019690965285019390935260ff90911660608401526001600160a01b0316608083015260a082015260c001610ff1565b905080611384576040516394ab6c0760e01b81526001600160a01b0385166004820152602401610e25565b610e3a868587604051806020016040528060008152506119a9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561141b575060408051601f3d908101601f1916820190925261141891810190613dc2565b60015b610f0157610a16611fe5565b6000610f27848484611ff0565b6000611440600a612086565b6001600160d01b0316905090565b61145661164d565b610a7e816120bf565b60006001610a67565b6000610a1660075490565b60003061147e610a02565b6001600160a01b0316146114a557604051637485328f60e11b815260040160405180910390fd5b5063bc197c8160e01b95945050505050565b6000818152600460205260408120546114ec90600160d01b810463ffffffff1690600160a01b900465ffffffffffff16613ddf565b65ffffffffffff1692915050565b61150261164d565b600080856001600160a01b0316858585604051611520929190613d63565b60006040518083038185875af1925050503d806000811461155d576040519150601f19603f3d011682016040523d82523d6000602084013e611562565b606091505b50915091506115718282612128565b50505050505050565b6000848484846040516020016115939493929190613e92565b60408051601f19818403018152919052805160209091012095945050505050565b6115bc61164d565b610a7e81612144565b60006115e683836115e160408051602081019091526000815290565b611ff0565b9392505050565b6115f561164d565b610a7e816121e2565b600030611609610a02565b6001600160a01b03161461163057604051637485328f60e11b815260040160405180910390fd5b5063f23a6e6160e01b95945050505050565b6000610a6782612223565b33611656610a02565b6001600160a01b03161461167f576040516347096e4760e01b8152336004820152602401610e25565b30611688610a02565b6001600160a01b0316146116c557600080366040516116a8929190613d63565b604051809103902090505b806116be60056122cd565b036116b357505b565b6064808211156116f45760405163243e544560e01b81526004810183905260248101829052604401610e25565b60006116fe611434565b905061171d61170b61139f565b6117148561234b565b600a919061237f565b505060408051828152602081018590527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a1505050565b60008160078111156117715761177161362e565b600160ff919091161b92915050565b60008061178c84610dc5565b905060008361179a8361175d565b16036115e6578381846040516331b75e4d60e01b8152600401610e2593929190613edd565b6000610e3a868686868661239a565b81546001600160801b03600160801b82048116918116600183019091160361180957604051638acb5f2760e01b815260040160405180910390fd5b6001600160801b03808216600090815260018086016020526040909120939093558354919092018216600160801b029116179055565b61184c8585858585612539565b5050505050565b60008061185f836125cf565b905060058160078111156118755761187561362e565b146118805792915050565b6000838152600c60205260409081902054600b549151632c258a9f60e11b81526004810182905290916001600160a01b03169063584b153e90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd9190613eff565b1561190c575060059392505050565b600b54604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa158015611955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119799190613eff565b15611988575060079392505050565b5060029392505050565b60006119a085858585612709565b95945050505050565b60006119a0858585856119c760408051602081019091526000815290565b611a51565b6000610a676119d96127a8565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611a0885856128d3565b5090925090506000816003811115611a2257611a2261362e565b148015611a405750856001600160a01b0316826001600160a01b0316145b80610e3a5750610e3a868686612920565b6000611a6186610b75600161175d565b506000611a7786611a7189610d91565b85611ff0565b9050611a8687878784876129fb565b8251600003611adb57856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda488878488604051611ace9493929190613f21565b60405180910390a2610e3a565b856001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb87128887848888604051611b1c959493929190613f49565b60405180910390a29695505050505050565b600065ffffffffffff821115611b61576040516306dfcc6560e41b81526030600482015260248101839052604401610e25565b5090565b815460009081816005811115611bc4576000611b8084612afc565b611b8a9085613d89565b60008881526020902090915081015465ffffffffffff9081169087161015611bb457809150611bc2565b611bbf816001613f83565b92505b505b6000611bd287878585612be4565b90508015611c0d57611bf787611be9600184613d89565b600091825260209091200190565b54600160301b90046001600160d01b03166110d8565b6000979650505050505050565b6008546040805165ffffffffffff928316815291831660208301527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a16008805465ffffffffffff191665ffffffffffff92909216919091179055565b80516000906034811015611c98576001915050610a67565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b14611ccb57600192505050610a67565b600080611cd9602885613d89565b90505b83811015611d4a57600080611d10888481518110611cfc57611cfc613ce0565b01602001516001600160f81b031916612c46565b9150915081611d285760019650505050505050610a67565b8060ff166004856001600160a01b0316901b1793505050806001019050611cdc565b50856001600160a01b0316816001600160a01b031614935050505092915050565b6000611d80868686868051906020012061157a565b905084518651141580611d9557508351865114155b80611d9f57508551155b15611dd457855184518651604051630447b05d60e41b8152600481019390935260248301919091526044820152606401610e25565b600081815260046020526040902054600160a01b900465ffffffffffff1615611e1f5780611e0182610dc5565b6040516331b75e4d60e01b8152610e25929190600090600401613edd565b6000611e29610db2565b611e3161139f565b65ffffffffffff16611e439190613f83565b90506000611e5e60085463ffffffff600160301b9091041690565b600084815260046020526040902080546001600160a01b0319166001600160a01b038716178155909150611e9183611b2e565b815465ffffffffffff91909116600160a01b0265ffffffffffff60a01b19909116178155611ebe82612cd8565b815463ffffffff91909116600160d01b0263ffffffff60d01b1990911617815588517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e090859087908c908c906001600160401b03811115611f2157611f216132f5565b604051908082528060200260200182016040528015611f5457816020015b6060815260200190600190039081611f3f5790505b508c89611f618a82613f83565b8e604051611f7799989796959493929190613f96565b60405180910390a150505095945050505050565b6060610a167f00000000000000000000000000000000000000000000000000000000000000006000612d09565b6060610a167f00000000000000000000000000000000000000000000000000000000000000006001612d09565b6000610a1643611b2e565b60007f0000000000000000000000000000000000000000000000000000000000000000604051630748d63560e31b81526001600160a01b038681166004830152602482018690529190911690633a46b1a890604401602060405180830381865afa158015612062573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f27919061406d565b805460009080156120b6576120a083611be9600184613d89565b54600160301b90046001600160d01b03166115e6565b60009392505050565b600b54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60608261213d5761213882612db4565b610a67565b5080610a67565b8063ffffffff1660000361216e5760405163f1cfbf0560e01b815260006004820152602401610e25565b6008546040805163ffffffff600160301b9093048316815291831660208301527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a16008805463ffffffff909216600160301b0269ffffffff00000000000019909216919091179055565b60075460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600755565b60006064612230836110e3565b604051632394e7a360e21b8152600481018590526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e539e8c90602401602060405180830381865afa158015612295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b9919061406d565b6122c39190614086565b610a6791906140b3565b80546000906001600160801b0380821691600160801b9004168103612305576040516375e52f4f60e01b815260040160405180910390fd5b6001600160801b038181166000908152600185810160205260408220805492905585546fffffffffffffffffffffffffffffffff19169301909116919091179092555090565b60006001600160d01b03821115611b61576040516306dfcc6560e41b815260d0600482015260248101839052604401610e25565b60008061238d858585612ddd565b915091505b935093915050565b600080600b60009054906101000a90046001600160a01b03166001600160a01b031663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612414919061406d565b905060003060601b6bffffffffffffffffffffffff19168418600b5460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f42790612467908a908a908a9060009088906004016140d5565b602060405180830381865afa158015612484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a8919061406d565b6000898152600c602052604080822092909255600b5491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb0916124f3918b918b918b919088908a90600401614123565b600060405180830381600087803b15801561250d57600080fd5b505af1158015612521573d6000803e3d6000fd5b5050505061127b82426125349190613f83565b611b2e565b600b546001600160a01b031663e38335e53486868660003060601b6bffffffffffffffffffffffff191688186040518763ffffffff1660e01b81526004016125859594939291906140d5565b6000604051808303818588803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b50505060009687525050600c602052505060408320929092555050565b6000818152600460205260408120805460ff600160f01b8204811691600160f81b900416811561260457506007949350505050565b801561261557506002949350505050565b600061262086610d91565b90508060000361264657604051636ad0607560e01b815260048101879052602401610e25565b600061265061139f565b65ffffffffffff16905080821061266e575060009695505050505050565b6000612679886114b7565b905081811061269057506001979650505050505050565b61269988612f57565b15806126b957506000888152600960205260409020805460019091015411155b156126cc57506003979650505050505050565b60008881526004602052604090206001015465ffffffffffff166000036126fb57506004979650505050505050565b506005979650505050505050565b60008061271886868686612f8e565b6000818152600c60205260409020549091508015610c1b57600b5460405163c4d252f560e01b8152600481018390526001600160a01b039091169063c4d252f590602401600060405180830381600087803b15801561277657600080fd5b505af115801561278a573d6000803e3d6000fd5b5050506000838152600c602052604081205550509050949350505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561280157507f000000000000000000000000000000000000000000000000000000000000000046145b1561282b57507f000000000000000000000000000000000000000000000000000000000000000090565b610a16604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6000806000835160410361290d5760208401516040850151606086015160001a6128ff8882858561303f565b955095509550505050612919565b50508151600091506002905b9250925092565b6000806000856001600160a01b0316858560405160240161294292919061417b565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b179052516129779190614194565b600060405180830381855afa9150503d80600081146129b2576040519150601f19603f3d011682016040523d82523d6000602084013e6129b7565b606091505b50915091508180156129cb57506020815110155b8015610e3a57508051630b135d3f60e11b906129f0908301602090810190840161406d565b149695505050505050565b60008581526009602090815260408083206001600160a01b0388168452600381019092529091205460ff1615612a4f576040516371c6af4960e01b81526001600160a01b0386166004820152602401610e25565b6001600160a01b03851660009081526003820160205260409020805460ff1916600117905560ff8416612a9b5782816000016000828254612a909190613f83565b90915550612af49050565b60001960ff851601612abb5782816001016000828254612a909190613f83565b60011960ff851601612adb5782816002016000828254612a909190613f83565b6040516303599be160e11b815260040160405180910390fd5b505050505050565b600081600003612b0e57506000919050565b60006001612b1b8461310e565b901c6001901b90506001818481612b3457612b3461409d565b048201901c90506001818481612b4c57612b4c61409d565b048201901c90506001818481612b6457612b6461409d565b048201901c90506001818481612b7c57612b7c61409d565b048201901c90506001818481612b9457612b9461409d565b048201901c90506001818481612bac57612bac61409d565b048201901c90506001818481612bc457612bc461409d565b048201901c90506115e681828581612bde57612bde61409d565b046131a2565b60005b81831015612c3e576000612bfb84846131b8565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff161115612c2a57809250612c38565b612c35816001613f83565b93505b50612be7565b509392505050565b60008060f883901c602f81118015612c615750603a8160ff16105b15612c7657600194602f199091019350915050565b8060ff166040108015612c8c575060478160ff16105b15612ca1576001946036199091019350915050565b8060ff166060108015612cb7575060678160ff16105b15612ccc576001946056199091019350915050565b50600093849350915050565b600063ffffffff821115611b61576040516306dfcc6560e41b81526020600482015260248101839052604401610e25565b606060ff8314612d2357612d1c836131d3565b9050610a67565b818054612d2f90613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5b90613ca6565b8015612da85780601f10612d7d57610100808354040283529160200191612da8565b820191906000526020600020905b815481529060010190602001808311612d8b57829003601f168201915b50505050509050610a67565b805115612dc45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b825460009081908015612efc576000612dfb87611be9600185613d89565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015612e4f57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612e9b5784612e7288611be9600186613d89565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055612eec565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506123929050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081612392565b600081815260096020526040812060028101546001820154612f799190613f83565b612f856109ca85610d91565b11159392505050565b600080612f9d8686868661157a565b9050612feb81612fad600761175d565b612fb7600661175d565b612fc1600261175d565b6001612fce6007826141b0565b612fd99060026142ad565b612fe39190613d89565b181818611780565b506000818152600460205260409081902080546001600160f81b0316600160f81b179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610d809083815260200190565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561307a5750600091506003905082613104565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156130ce573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166130fa57506000925060019150829050613104565b9250600091508190505b9450945094915050565b600080608083901c1561312357608092831c92015b604083901c1561313557604092831c92015b602083901c1561314757602092831c92015b601083901c1561315957601092831c92015b600883901c1561316b57600892831c92015b600483901c1561317d57600492831c92015b600283901c1561318f57600292831c92015b600183901c15610a675760010192915050565b60008183106131b157816115e6565b5090919050565b60006131c760028484186140b3565b6115e690848416613f83565b606060006131e083613212565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610a6757604051632cd44ac360e21b815260040160405180910390fd5b60006020828403121561324c57600080fd5b81356001600160e01b0319811681146115e657600080fd5b60006020828403121561327657600080fd5b5035919050565b60005b83811015613298578181015183820152602001613280565b50506000910152565b600081518084526132b981602086016020860161327d565b601f01601f19169290920160200192915050565b6020815260006115e660208301846132a1565b6001600160a01b0381168114610a7e57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613333576133336132f5565b604052919050565b60006001600160401b03821115613354576133546132f5565b50601f01601f191660200190565b60006133756133708461333b565b61330b565b905082815283838301111561338957600080fd5b828260208301376000602084830101529392505050565b600082601f8301126133b157600080fd5b6115e683833560208501613362565b600080600080608085870312156133d657600080fd5b84356133e1816132e0565b935060208501356133f1816132e0565b92506040850135915060608501356001600160401b0381111561341357600080fd5b61341f878288016133a0565b91505092959194509250565b60006001600160401b03821115613444576134446132f5565b5060051b60200190565b600082601f83011261345f57600080fd5b8135602061346f6133708361342b565b8083825260208201915060208460051b87010193508684111561349157600080fd5b602086015b848110156134b65780356134a9816132e0565b8352918301918301613496565b509695505050505050565b600082601f8301126134d257600080fd5b813560206134e26133708361342b565b8083825260208201915060208460051b87010193508684111561350457600080fd5b602086015b848110156134b65780358352918301918301613509565b600082601f83011261353157600080fd5b813560206135416133708361342b565b82815260059290921b8401810191818101908684111561356057600080fd5b8286015b848110156134b65780356001600160401b038111156135835760008081fd5b6135918986838b01016133a0565b845250918301918301613564565b600080600080608085870312156135b557600080fd5b84356001600160401b03808211156135cc57600080fd5b6135d88883890161344e565b955060208701359150808211156135ee57600080fd5b6135fa888389016134c1565b9450604087013591508082111561361057600080fd5b5061361d87828801613520565b949793965093946060013593505050565b634e487b7160e01b600052602160045260246000fd5b6008811061366257634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a678284613644565b6000806040838503121561368757600080fd5b823591506020830135613699816132e0565b809150509250929050565b803560ff81168114610f0157600080fd5b600080604083850312156136c857600080fd5b823591506136d8602084016136a4565b90509250929050565b60008083601f8401126136f357600080fd5b5081356001600160401b0381111561370a57600080fd5b60208301915083602082850101111561372257600080fd5b9250929050565b600080600080600080600060c0888a03121561374457600080fd5b87359650613754602089016136a4565b95506040880135613764816132e0565b945060608801356001600160401b038082111561378057600080fd5b61378c8b838c016136e1565b909650945060808a01359150808211156137a557600080fd5b6137b18b838c016133a0565b935060a08a01359150808211156137c757600080fd5b506137d48a828b016133a0565b91505092959891949750929550565b6000806000806000608086880312156137fb57600080fd5b8535945061380b602087016136a4565b935060408601356001600160401b038082111561382757600080fd5b61383389838a016136e1565b9095509350606088013591508082111561384c57600080fd5b50613859888289016133a0565b9150509295509295909350565b65ffffffffffff81168114610a7e57600080fd5b60006020828403121561388c57600080fd5b81356115e681613866565b600080600080606085870312156138ad57600080fd5b843593506138bd602086016136a4565b925060408501356001600160401b038111156138d857600080fd5b6138e4878288016136e1565b95989497509550505050565b6000806000806080858703121561390657600080fd5b84356001600160401b038082111561391d57600080fd5b6139298883890161344e565b9550602087013591508082111561393f57600080fd5b61394b888389016134c1565b9450604087013591508082111561396157600080fd5b61396d88838901613520565b9350606087013591508082111561398357600080fd5b508501601f8101871361399557600080fd5b61341f87823560208401613362565b6000602082840312156139b657600080fd5b81356115e6816132e0565b60008151808452602080850194506020840160005b838110156139f2578151875295820195908201906001016139d6565b509495945050505050565b60ff60f81b8816815260e060208201526000613a1c60e08301896132a1565b8281036040840152613a2e81896132a1565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050613a5f81856139c1565b9a9950505050505050505050565b60008060008060808587031215613a8357600080fd5b84359350613a93602086016136a4565b92506040850135613aa3816132e0565b915060608501356001600160401b0381111561341357600080fd5b600080600060608486031215613ad357600080fd5b8335613ade816132e0565b92506020840135915060408401356001600160401b03811115613b0057600080fd5b613b0c868287016133a0565b9150509250925092565b600080600080600060a08688031215613b2e57600080fd5b8535613b39816132e0565b94506020860135613b49816132e0565b935060408601356001600160401b0380821115613b6557600080fd5b613b7189838a016134c1565b94506060880135915080821115613b8757600080fd5b613b9389838a016134c1565b9350608088013591508082111561384c57600080fd5b60008060008060608587031215613bbf57600080fd5b8435613bca816132e0565b93506020850135925060408501356001600160401b038111156138d857600080fd5b600060208284031215613bfe57600080fd5b813563ffffffff811681146115e657600080fd5b60008060408385031215613c2557600080fd5b8235613c30816132e0565b946020939093013593505050565b600080600080600060a08688031215613c5657600080fd5b8535613c61816132e0565b94506020860135613c71816132e0565b9350604086013592506060860135915060808601356001600160401b03811115613c9a57600080fd5b613859888289016133a0565b600181811c90821680613cba57607f821691505b602082108103613cda57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613d0857600080fd5b81516001600160401b03811115613d1e57600080fd5b8201601f81018413613d2f57600080fd5b8051613d3d6133708261333b565b818152856020838501011115613d5257600080fd5b6119a082602083016020860161327d565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a6757610a67613d73565b65ffffffffffff828116828216039080821115613dbb57613dbb613d73565b5092915050565b600060208284031215613dd457600080fd5b81516115e681613866565b65ffffffffffff818116838216019080821115613dbb57613dbb613d73565b60008151808452602080850194506020840160005b838110156139f25781516001600160a01b031687529582019590820190600101613e13565b60008282518085526020808601955060208260051b8401016020860160005b84811015613e8557601f19868403018952613e738383516132a1565b98840198925090830190600101613e57565b5090979650505050505050565b608081526000613ea56080830187613dfe565b8281036020840152613eb781876139c1565b90508281036040840152613ecb8186613e38565b91505082606083015295945050505050565b83815260608101613ef16020830185613644565b826040830152949350505050565b600060208284031215613f1157600080fd5b815180151581146115e657600080fd5b84815260ff84166020820152826040820152608060608201526000610e3a60808301846132a1565b85815260ff8516602082015283604082015260a060608201526000613f7160a08301856132a1565b828103608084015261127b81856132a1565b80820180821115610a6757610a67613d73565b60006101208b8352602060018060a01b038c1681850152816040850152613fbf8285018c613dfe565b91508382036060850152613fd3828b6139c1565b915083820360808501528189518084528284019150828160051b850101838c0160005b8381101561402457601f198784030185526140128383516132a1565b94860194925090850190600101613ff6565b505086810360a0880152614038818c613e38565b9450505050508560c08401528460e084015282810361010084015261405d81856132a1565b9c9b505050505050505050505050565b60006020828403121561407f57600080fd5b5051919050565b8082028115828204841417610a6757610a67613d73565b634e487b7160e01b600052601260045260246000fd5b6000826140d057634e487b7160e01b600052601260045260246000fd5b500490565b60a0815260006140e860a0830188613dfe565b82810360208401526140fa81886139c1565b9050828103604084015261410e8187613e38565b60608401959095525050608001529392505050565b60c08152600061413660c0830189613dfe565b828103602084015261414881896139c1565b9050828103604084015261415c8188613e38565b60608401969096525050608081019290925260a0909101529392505050565b828152604060208201526000610f2760408301846132a1565b600082516141a681846020870161327d565b9190910192915050565b60ff8181168382160190811115610a6757610a67613d73565b600181815b808511156142045781600019048211156141ea576141ea613d73565b808516156141f757918102915b93841c93908002906141ce565b509250929050565b60008261421b57506001610a67565b8161422857506000610a67565b816001811461423e576002811461424857614264565b6001915050610a67565b60ff84111561425957614259613d73565b50506001821b610a67565b5060208310610133831016604e8410600b8410161715614287575081810a610a67565b61429183836141c9565b80600019048211156142a5576142a5613d73565b029392505050565b60006115e660ff84168361420c56fea26469706673582212207e5225747b7cf04e0aa9458d081e82f64dc7a4a4bbcdbfddb6c229e2586bbbd864736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106102975760003560e01c80637ecebe001161015a578063c01f9e37116100c1578063e540d01d1161007a578063e540d01d1461092f578063eb9019d41461094f578063ece40cc11461096f578063f23a6e611461098f578063f8ce560a146109af578063fc0c546a146109cf57600080fd5b8063c01f9e3714610844578063c28bc2fa14610864578063c59057e414610877578063d33219b414610897578063dd4e2ba5146108b5578063deaaa7cc146108fb57600080fd5b8063a7713a7011610113578063a7713a7014610782578063a890c91014610797578063a9a95294146107b7578063ab58fb8e146107d7578063b58131b01461080f578063bc197c811461082457600080fd5b80637ecebe00146106a457806384b0196e146106da5780638ff262e31461070257806391ddadf41461072257806397c3d3341461074e5780639a802a6d1461076257600080fd5b806343859632116101fe5780635b8d0e0d116101b75780635b8d0e0d146105e45780635f398a141461060457806360c4247f1461062457806379051887146106445780637b3c71d3146106645780637d5e81e21461068457600080fd5b806343859632146104c6578063452115d6146105105780634bf5d7e914610530578063544ffc9c1461054557806354fd4d501461059a57806356781388146105c457600080fd5b8063160cbed711610250578063160cbed7146103fd5780632656227d1461041d5780632d63f693146104305780632fe3e261146104505780633932abb1146104845780633e4f49e61461049957600080fd5b806301ffc9a7146102d357806302a251a31461030857806306f3f9e61461033457806306fdde0314610354578063143489d014610376578063150b7a02146103c457600080fd5b366102ce57306102a5610a02565b6001600160a01b0316146102cc57604051637485328f60e11b815260040160405180910390fd5b005b600080fd5b3480156102df57600080fd5b506102f36102ee36600461323a565b610a1b565b60405190151581526020015b60405180910390f35b34801561031457600080fd5b50600854600160301b900463ffffffff165b6040519081526020016102ff565b34801561034057600080fd5b506102cc61034f366004613264565b610a6d565b34801561036057600080fd5b50610369610a81565b6040516102ff91906132cd565b34801561038257600080fd5b506103ac610391366004613264565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016102ff565b3480156103d057600080fd5b506103e46103df3660046133c0565b610b13565b6040516001600160e01b031990911681526020016102ff565b34801561040957600080fd5b5061032661041836600461359f565b610b56565b61032661042b36600461359f565b610c25565b34801561043c57600080fd5b5061032661044b366004613264565b610d91565b34801561045c57600080fd5b506103267f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a81181565b34801561049057600080fd5b50610326610db2565b3480156104a557600080fd5b506104b96104b4366004613264565b610dc5565b6040516102ff9190613666565b3480156104d257600080fd5b506102f36104e1366004613674565b60008281526009602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b34801561051c57600080fd5b5061032661052b36600461359f565b610dd0565b34801561053c57600080fd5b50610369610e44565b34801561055157600080fd5b5061057f610560366004613264565b6000908152600960205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016102ff565b3480156105a657600080fd5b506040805180820190915260018152603160f81b6020820152610369565b3480156105d057600080fd5b506103266105df3660046136b5565b610f06565b3480156105f057600080fd5b506103266105ff366004613729565b610f2f565b34801561061057600080fd5b5061032661061f3660046137e3565b61108e565b34801561063057600080fd5b5061032661063f366004613264565b6110e3565b34801561065057600080fd5b506102cc61065f36600461387a565b611171565b34801561067057600080fd5b5061032661067f366004613897565b611182565b34801561069057600080fd5b5061032661069f3660046138f0565b6111ca565b3480156106b057600080fd5b506103266106bf3660046139a4565b6001600160a01b031660009081526002602052604090205490565b3480156106e657600080fd5b506106ef611287565b6040516102ff97969594939291906139fd565b34801561070e57600080fd5b5061032661071d366004613a6d565b6112cd565b34801561072e57600080fd5b5061073761139f565b60405165ffffffffffff90911681526020016102ff565b34801561075a57600080fd5b506064610326565b34801561076e57600080fd5b5061032661077d366004613abe565b611427565b34801561078e57600080fd5b50610326611434565b3480156107a357600080fd5b506102cc6107b23660046139a4565b61144e565b3480156107c357600080fd5b506102f36107d2366004613264565b61145f565b3480156107e357600080fd5b506103266107f2366004613264565b60009081526004602052604090206001015465ffffffffffff1690565b34801561081b57600080fd5b50610326611468565b34801561083057600080fd5b506103e461083f366004613b16565b611473565b34801561085057600080fd5b5061032661085f366004613264565b6114b7565b6102cc610872366004613ba9565b6114fa565b34801561088357600080fd5b5061032661089236600461359f565b61157a565b3480156108a357600080fd5b50600b546001600160a01b03166103ac565b3480156108c157600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e90820152610369565b34801561090757600080fd5b506103267ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d781565b34801561093b57600080fd5b506102cc61094a366004613bec565b6115b4565b34801561095b57600080fd5b5061032661096a366004613c12565b6115c5565b34801561097b57600080fd5b506102cc61098a366004613264565b6115ed565b34801561099b57600080fd5b506103e46109aa366004613c3e565b6115fe565b3480156109bb57600080fd5b506103266109ca366004613264565b611642565b3480156109db57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103ac565b6000610a16600b546001600160a01b031690565b905090565b60006001600160e01b031982166332a2ad4360e11b1480610a4c57506001600160e01b03198216630271189760e51b145b80610a6757506301ffc9a760e01b6001600160e01b03198316145b92915050565b610a7561164d565b610a7e816116c7565b50565b606060038054610a9090613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90613ca6565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b600030610b1e610a02565b6001600160a01b031614610b4557604051637485328f60e11b815260040160405180910390fd5b50630a85bd0160e11b949350505050565b600080610b658686868661157a565b9050610b7a81610b75600461175d565b611780565b506000610b8a82888888886117bf565b905065ffffffffffff811615610c0257600082815260046020908152604091829020600101805465ffffffffffff191665ffffffffffff85169081179091558251858152918201527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892910160405180910390a1610c1b565b604051634844252360e11b815260040160405180910390fd5b5095945050505050565b600080610c348686868661157a565b9050610c5481610c44600561175d565b610c4e600461175d565b17611780565b506000818152600460205260409020805460ff60f01b1916600160f01b17905530610c7d610a02565b6001600160a01b031614610d075760005b8651811015610d0557306001600160a01b0316878281518110610cb357610cb3613ce0565b60200260200101516001600160a01b031603610cfd57610cfd858281518110610cde57610cde613ce0565b60200260200101518051906020012060056117ce90919063ffffffff16565b600101610c8e565b505b610d14818787878761183f565b30610d1d610a02565b6001600160a01b031614158015610d4957506005546001600160801b03808216600160801b9092041614155b15610d545760006005555b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906020015b60405180910390a195945050505050565b600090815260046020526040902054600160a01b900465ffffffffffff1690565b6000610a1660085465ffffffffffff1690565b6000610a6782611853565b600080610ddf8686868661157a565b9050610def81610b75600061175d565b506000818152600460205260409020546001600160a01b03163314610e2e5760405163233d98e360e01b81523360048201526024015b60405180910390fd5b610e3a86868686611992565b9695505050505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634bf5d7e96040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610ec557506040513d6000823e601f3d908101601f19168201604052610ec29190810190613cf6565b60015b610f01575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b600080339050610f27848285604051806020016040528060008152506119a9565b949350505050565b6000806110128761100c7f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a8118c8c8c610f848e6001600160a01b0316600090815260026020526040902080546001810190915590565b8d8d604051610f94929190613d63565b60405180910390208c80519060200120604051602001610ff19796959493929190968752602087019590955260ff9390931660408601526001600160a01b03919091166060850152608084015260a083015260c082015260e00190565b604051602081830303815290604052805190602001206119cc565b856119f9565b90508061103d576040516394ab6c0760e01b81526001600160a01b0388166004820152602401610e25565b61108189888a89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250611a51915050565b9998505050505050505050565b6000803390506110d887828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611a51915050565b979650505050505050565b600a805460009182906110f7600184613d89565b8154811061110757611107613ce0565b6000918252602090912001805490915065ffffffffffff811690600160301b90046001600160d01b031685821161114a576001600160d01b031695945050505050565b61115e61115687611b2e565b600a90611b65565b6001600160d01b03169695505050505050565b61117961164d565b610a7e81611c1a565b600080339050610e3a86828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a992505050565b6000336111d78184611c80565b6111ff5760405163d9b3955760e01b81526001600160a01b0382166004820152602401610e25565b600061122682600161120f61139f565b6112199190613d9c565b65ffffffffffff166115c5565b90506000611232611468565b90508082101561126e57604051636121770b60e11b81526001600160a01b03841660048201526024810183905260448101829052606401610e25565b61127b8888888887611d6b565b98975050505050505050565b60006060806000806000606061129b611f8b565b6112a3611fb8565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000806113598461100c7ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d78989896113228b6001600160a01b0316600090815260026020526040902080546001810190915590565b60408051602081019690965285019390935260ff90911660608401526001600160a01b0316608083015260a082015260c001610ff1565b905080611384576040516394ab6c0760e01b81526001600160a01b0385166004820152602401610e25565b610e3a868587604051806020016040528060008152506119a9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561141b575060408051601f3d908101601f1916820190925261141891810190613dc2565b60015b610f0157610a16611fe5565b6000610f27848484611ff0565b6000611440600a612086565b6001600160d01b0316905090565b61145661164d565b610a7e816120bf565b60006001610a67565b6000610a1660075490565b60003061147e610a02565b6001600160a01b0316146114a557604051637485328f60e11b815260040160405180910390fd5b5063bc197c8160e01b95945050505050565b6000818152600460205260408120546114ec90600160d01b810463ffffffff1690600160a01b900465ffffffffffff16613ddf565b65ffffffffffff1692915050565b61150261164d565b600080856001600160a01b0316858585604051611520929190613d63565b60006040518083038185875af1925050503d806000811461155d576040519150601f19603f3d011682016040523d82523d6000602084013e611562565b606091505b50915091506115718282612128565b50505050505050565b6000848484846040516020016115939493929190613e92565b60408051601f19818403018152919052805160209091012095945050505050565b6115bc61164d565b610a7e81612144565b60006115e683836115e160408051602081019091526000815290565b611ff0565b9392505050565b6115f561164d565b610a7e816121e2565b600030611609610a02565b6001600160a01b03161461163057604051637485328f60e11b815260040160405180910390fd5b5063f23a6e6160e01b95945050505050565b6000610a6782612223565b33611656610a02565b6001600160a01b03161461167f576040516347096e4760e01b8152336004820152602401610e25565b30611688610a02565b6001600160a01b0316146116c557600080366040516116a8929190613d63565b604051809103902090505b806116be60056122cd565b036116b357505b565b6064808211156116f45760405163243e544560e01b81526004810183905260248101829052604401610e25565b60006116fe611434565b905061171d61170b61139f565b6117148561234b565b600a919061237f565b505060408051828152602081018590527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a1505050565b60008160078111156117715761177161362e565b600160ff919091161b92915050565b60008061178c84610dc5565b905060008361179a8361175d565b16036115e6578381846040516331b75e4d60e01b8152600401610e2593929190613edd565b6000610e3a868686868661239a565b81546001600160801b03600160801b82048116918116600183019091160361180957604051638acb5f2760e01b815260040160405180910390fd5b6001600160801b03808216600090815260018086016020526040909120939093558354919092018216600160801b029116179055565b61184c8585858585612539565b5050505050565b60008061185f836125cf565b905060058160078111156118755761187561362e565b146118805792915050565b6000838152600c60205260409081902054600b549151632c258a9f60e11b81526004810182905290916001600160a01b03169063584b153e90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd9190613eff565b1561190c575060059392505050565b600b54604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa158015611955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119799190613eff565b15611988575060079392505050565b5060029392505050565b60006119a085858585612709565b95945050505050565b60006119a0858585856119c760408051602081019091526000815290565b611a51565b6000610a676119d96127a8565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611a0885856128d3565b5090925090506000816003811115611a2257611a2261362e565b148015611a405750856001600160a01b0316826001600160a01b0316145b80610e3a5750610e3a868686612920565b6000611a6186610b75600161175d565b506000611a7786611a7189610d91565b85611ff0565b9050611a8687878784876129fb565b8251600003611adb57856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda488878488604051611ace9493929190613f21565b60405180910390a2610e3a565b856001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb87128887848888604051611b1c959493929190613f49565b60405180910390a29695505050505050565b600065ffffffffffff821115611b61576040516306dfcc6560e41b81526030600482015260248101839052604401610e25565b5090565b815460009081816005811115611bc4576000611b8084612afc565b611b8a9085613d89565b60008881526020902090915081015465ffffffffffff9081169087161015611bb457809150611bc2565b611bbf816001613f83565b92505b505b6000611bd287878585612be4565b90508015611c0d57611bf787611be9600184613d89565b600091825260209091200190565b54600160301b90046001600160d01b03166110d8565b6000979650505050505050565b6008546040805165ffffffffffff928316815291831660208301527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a16008805465ffffffffffff191665ffffffffffff92909216919091179055565b80516000906034811015611c98576001915050610a67565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b14611ccb57600192505050610a67565b600080611cd9602885613d89565b90505b83811015611d4a57600080611d10888481518110611cfc57611cfc613ce0565b01602001516001600160f81b031916612c46565b9150915081611d285760019650505050505050610a67565b8060ff166004856001600160a01b0316901b1793505050806001019050611cdc565b50856001600160a01b0316816001600160a01b031614935050505092915050565b6000611d80868686868051906020012061157a565b905084518651141580611d9557508351865114155b80611d9f57508551155b15611dd457855184518651604051630447b05d60e41b8152600481019390935260248301919091526044820152606401610e25565b600081815260046020526040902054600160a01b900465ffffffffffff1615611e1f5780611e0182610dc5565b6040516331b75e4d60e01b8152610e25929190600090600401613edd565b6000611e29610db2565b611e3161139f565b65ffffffffffff16611e439190613f83565b90506000611e5e60085463ffffffff600160301b9091041690565b600084815260046020526040902080546001600160a01b0319166001600160a01b038716178155909150611e9183611b2e565b815465ffffffffffff91909116600160a01b0265ffffffffffff60a01b19909116178155611ebe82612cd8565b815463ffffffff91909116600160d01b0263ffffffff60d01b1990911617815588517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e090859087908c908c906001600160401b03811115611f2157611f216132f5565b604051908082528060200260200182016040528015611f5457816020015b6060815260200190600190039081611f3f5790505b508c89611f618a82613f83565b8e604051611f7799989796959493929190613f96565b60405180910390a150505095945050505050565b6060610a167f00000000000000000000000000000000000000000000000000000000000000006000612d09565b6060610a167f00000000000000000000000000000000000000000000000000000000000000006001612d09565b6000610a1643611b2e565b60007f0000000000000000000000000000000000000000000000000000000000000000604051630748d63560e31b81526001600160a01b038681166004830152602482018690529190911690633a46b1a890604401602060405180830381865afa158015612062573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f27919061406d565b805460009080156120b6576120a083611be9600184613d89565b54600160301b90046001600160d01b03166115e6565b60009392505050565b600b54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60608261213d5761213882612db4565b610a67565b5080610a67565b8063ffffffff1660000361216e5760405163f1cfbf0560e01b815260006004820152602401610e25565b6008546040805163ffffffff600160301b9093048316815291831660208301527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a16008805463ffffffff909216600160301b0269ffffffff00000000000019909216919091179055565b60075460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600755565b60006064612230836110e3565b604051632394e7a360e21b8152600481018590526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e539e8c90602401602060405180830381865afa158015612295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b9919061406d565b6122c39190614086565b610a6791906140b3565b80546000906001600160801b0380821691600160801b9004168103612305576040516375e52f4f60e01b815260040160405180910390fd5b6001600160801b038181166000908152600185810160205260408220805492905585546fffffffffffffffffffffffffffffffff19169301909116919091179092555090565b60006001600160d01b03821115611b61576040516306dfcc6560e41b815260d0600482015260248101839052604401610e25565b60008061238d858585612ddd565b915091505b935093915050565b600080600b60009054906101000a90046001600160a01b03166001600160a01b031663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612414919061406d565b905060003060601b6bffffffffffffffffffffffff19168418600b5460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f42790612467908a908a908a9060009088906004016140d5565b602060405180830381865afa158015612484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a8919061406d565b6000898152600c602052604080822092909255600b5491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb0916124f3918b918b918b919088908a90600401614123565b600060405180830381600087803b15801561250d57600080fd5b505af1158015612521573d6000803e3d6000fd5b5050505061127b82426125349190613f83565b611b2e565b600b546001600160a01b031663e38335e53486868660003060601b6bffffffffffffffffffffffff191688186040518763ffffffff1660e01b81526004016125859594939291906140d5565b6000604051808303818588803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b50505060009687525050600c602052505060408320929092555050565b6000818152600460205260408120805460ff600160f01b8204811691600160f81b900416811561260457506007949350505050565b801561261557506002949350505050565b600061262086610d91565b90508060000361264657604051636ad0607560e01b815260048101879052602401610e25565b600061265061139f565b65ffffffffffff16905080821061266e575060009695505050505050565b6000612679886114b7565b905081811061269057506001979650505050505050565b61269988612f57565b15806126b957506000888152600960205260409020805460019091015411155b156126cc57506003979650505050505050565b60008881526004602052604090206001015465ffffffffffff166000036126fb57506004979650505050505050565b506005979650505050505050565b60008061271886868686612f8e565b6000818152600c60205260409020549091508015610c1b57600b5460405163c4d252f560e01b8152600481018390526001600160a01b039091169063c4d252f590602401600060405180830381600087803b15801561277657600080fd5b505af115801561278a573d6000803e3d6000fd5b5050506000838152600c602052604081205550509050949350505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561280157507f000000000000000000000000000000000000000000000000000000000000000046145b1561282b57507f000000000000000000000000000000000000000000000000000000000000000090565b610a16604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6000806000835160410361290d5760208401516040850151606086015160001a6128ff8882858561303f565b955095509550505050612919565b50508151600091506002905b9250925092565b6000806000856001600160a01b0316858560405160240161294292919061417b565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b179052516129779190614194565b600060405180830381855afa9150503d80600081146129b2576040519150601f19603f3d011682016040523d82523d6000602084013e6129b7565b606091505b50915091508180156129cb57506020815110155b8015610e3a57508051630b135d3f60e11b906129f0908301602090810190840161406d565b149695505050505050565b60008581526009602090815260408083206001600160a01b0388168452600381019092529091205460ff1615612a4f576040516371c6af4960e01b81526001600160a01b0386166004820152602401610e25565b6001600160a01b03851660009081526003820160205260409020805460ff1916600117905560ff8416612a9b5782816000016000828254612a909190613f83565b90915550612af49050565b60001960ff851601612abb5782816001016000828254612a909190613f83565b60011960ff851601612adb5782816002016000828254612a909190613f83565b6040516303599be160e11b815260040160405180910390fd5b505050505050565b600081600003612b0e57506000919050565b60006001612b1b8461310e565b901c6001901b90506001818481612b3457612b3461409d565b048201901c90506001818481612b4c57612b4c61409d565b048201901c90506001818481612b6457612b6461409d565b048201901c90506001818481612b7c57612b7c61409d565b048201901c90506001818481612b9457612b9461409d565b048201901c90506001818481612bac57612bac61409d565b048201901c90506001818481612bc457612bc461409d565b048201901c90506115e681828581612bde57612bde61409d565b046131a2565b60005b81831015612c3e576000612bfb84846131b8565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff161115612c2a57809250612c38565b612c35816001613f83565b93505b50612be7565b509392505050565b60008060f883901c602f81118015612c615750603a8160ff16105b15612c7657600194602f199091019350915050565b8060ff166040108015612c8c575060478160ff16105b15612ca1576001946036199091019350915050565b8060ff166060108015612cb7575060678160ff16105b15612ccc576001946056199091019350915050565b50600093849350915050565b600063ffffffff821115611b61576040516306dfcc6560e41b81526020600482015260248101839052604401610e25565b606060ff8314612d2357612d1c836131d3565b9050610a67565b818054612d2f90613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5b90613ca6565b8015612da85780601f10612d7d57610100808354040283529160200191612da8565b820191906000526020600020905b815481529060010190602001808311612d8b57829003601f168201915b50505050509050610a67565b805115612dc45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b825460009081908015612efc576000612dfb87611be9600185613d89565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015612e4f57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612e9b5784612e7288611be9600186613d89565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055612eec565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506123929050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081612392565b600081815260096020526040812060028101546001820154612f799190613f83565b612f856109ca85610d91565b11159392505050565b600080612f9d8686868661157a565b9050612feb81612fad600761175d565b612fb7600661175d565b612fc1600261175d565b6001612fce6007826141b0565b612fd99060026142ad565b612fe39190613d89565b181818611780565b506000818152600460205260409081902080546001600160f81b0316600160f81b179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610d809083815260200190565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561307a5750600091506003905082613104565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156130ce573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166130fa57506000925060019150829050613104565b9250600091508190505b9450945094915050565b600080608083901c1561312357608092831c92015b604083901c1561313557604092831c92015b602083901c1561314757602092831c92015b601083901c1561315957601092831c92015b600883901c1561316b57600892831c92015b600483901c1561317d57600492831c92015b600283901c1561318f57600292831c92015b600183901c15610a675760010192915050565b60008183106131b157816115e6565b5090919050565b60006131c760028484186140b3565b6115e690848416613f83565b606060006131e083613212565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610a6757604051632cd44ac360e21b815260040160405180910390fd5b60006020828403121561324c57600080fd5b81356001600160e01b0319811681146115e657600080fd5b60006020828403121561327657600080fd5b5035919050565b60005b83811015613298578181015183820152602001613280565b50506000910152565b600081518084526132b981602086016020860161327d565b601f01601f19169290920160200192915050565b6020815260006115e660208301846132a1565b6001600160a01b0381168114610a7e57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613333576133336132f5565b604052919050565b60006001600160401b03821115613354576133546132f5565b50601f01601f191660200190565b60006133756133708461333b565b61330b565b905082815283838301111561338957600080fd5b828260208301376000602084830101529392505050565b600082601f8301126133b157600080fd5b6115e683833560208501613362565b600080600080608085870312156133d657600080fd5b84356133e1816132e0565b935060208501356133f1816132e0565b92506040850135915060608501356001600160401b0381111561341357600080fd5b61341f878288016133a0565b91505092959194509250565b60006001600160401b03821115613444576134446132f5565b5060051b60200190565b600082601f83011261345f57600080fd5b8135602061346f6133708361342b565b8083825260208201915060208460051b87010193508684111561349157600080fd5b602086015b848110156134b65780356134a9816132e0565b8352918301918301613496565b509695505050505050565b600082601f8301126134d257600080fd5b813560206134e26133708361342b565b8083825260208201915060208460051b87010193508684111561350457600080fd5b602086015b848110156134b65780358352918301918301613509565b600082601f83011261353157600080fd5b813560206135416133708361342b565b82815260059290921b8401810191818101908684111561356057600080fd5b8286015b848110156134b65780356001600160401b038111156135835760008081fd5b6135918986838b01016133a0565b845250918301918301613564565b600080600080608085870312156135b557600080fd5b84356001600160401b03808211156135cc57600080fd5b6135d88883890161344e565b955060208701359150808211156135ee57600080fd5b6135fa888389016134c1565b9450604087013591508082111561361057600080fd5b5061361d87828801613520565b949793965093946060013593505050565b634e487b7160e01b600052602160045260246000fd5b6008811061366257634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a678284613644565b6000806040838503121561368757600080fd5b823591506020830135613699816132e0565b809150509250929050565b803560ff81168114610f0157600080fd5b600080604083850312156136c857600080fd5b823591506136d8602084016136a4565b90509250929050565b60008083601f8401126136f357600080fd5b5081356001600160401b0381111561370a57600080fd5b60208301915083602082850101111561372257600080fd5b9250929050565b600080600080600080600060c0888a03121561374457600080fd5b87359650613754602089016136a4565b95506040880135613764816132e0565b945060608801356001600160401b038082111561378057600080fd5b61378c8b838c016136e1565b909650945060808a01359150808211156137a557600080fd5b6137b18b838c016133a0565b935060a08a01359150808211156137c757600080fd5b506137d48a828b016133a0565b91505092959891949750929550565b6000806000806000608086880312156137fb57600080fd5b8535945061380b602087016136a4565b935060408601356001600160401b038082111561382757600080fd5b61383389838a016136e1565b9095509350606088013591508082111561384c57600080fd5b50613859888289016133a0565b9150509295509295909350565b65ffffffffffff81168114610a7e57600080fd5b60006020828403121561388c57600080fd5b81356115e681613866565b600080600080606085870312156138ad57600080fd5b843593506138bd602086016136a4565b925060408501356001600160401b038111156138d857600080fd5b6138e4878288016136e1565b95989497509550505050565b6000806000806080858703121561390657600080fd5b84356001600160401b038082111561391d57600080fd5b6139298883890161344e565b9550602087013591508082111561393f57600080fd5b61394b888389016134c1565b9450604087013591508082111561396157600080fd5b61396d88838901613520565b9350606087013591508082111561398357600080fd5b508501601f8101871361399557600080fd5b61341f87823560208401613362565b6000602082840312156139b657600080fd5b81356115e6816132e0565b60008151808452602080850194506020840160005b838110156139f2578151875295820195908201906001016139d6565b509495945050505050565b60ff60f81b8816815260e060208201526000613a1c60e08301896132a1565b8281036040840152613a2e81896132a1565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050613a5f81856139c1565b9a9950505050505050505050565b60008060008060808587031215613a8357600080fd5b84359350613a93602086016136a4565b92506040850135613aa3816132e0565b915060608501356001600160401b0381111561341357600080fd5b600080600060608486031215613ad357600080fd5b8335613ade816132e0565b92506020840135915060408401356001600160401b03811115613b0057600080fd5b613b0c868287016133a0565b9150509250925092565b600080600080600060a08688031215613b2e57600080fd5b8535613b39816132e0565b94506020860135613b49816132e0565b935060408601356001600160401b0380821115613b6557600080fd5b613b7189838a016134c1565b94506060880135915080821115613b8757600080fd5b613b9389838a016134c1565b9350608088013591508082111561384c57600080fd5b60008060008060608587031215613bbf57600080fd5b8435613bca816132e0565b93506020850135925060408501356001600160401b038111156138d857600080fd5b600060208284031215613bfe57600080fd5b813563ffffffff811681146115e657600080fd5b60008060408385031215613c2557600080fd5b8235613c30816132e0565b946020939093013593505050565b600080600080600060a08688031215613c5657600080fd5b8535613c61816132e0565b94506020860135613c71816132e0565b9350604086013592506060860135915060808601356001600160401b03811115613c9a57600080fd5b613859888289016133a0565b600181811c90821680613cba57607f821691505b602082108103613cda57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613d0857600080fd5b81516001600160401b03811115613d1e57600080fd5b8201601f81018413613d2f57600080fd5b8051613d3d6133708261333b565b818152856020838501011115613d5257600080fd5b6119a082602083016020860161327d565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a6757610a67613d73565b65ffffffffffff828116828216039080821115613dbb57613dbb613d73565b5092915050565b600060208284031215613dd457600080fd5b81516115e681613866565b65ffffffffffff818116838216019080821115613dbb57613dbb613d73565b60008151808452602080850194506020840160005b838110156139f25781516001600160a01b031687529582019590820190600101613e13565b60008282518085526020808601955060208260051b8401016020860160005b84811015613e8557601f19868403018952613e738383516132a1565b98840198925090830190600101613e57565b5090979650505050505050565b608081526000613ea56080830187613dfe565b8281036020840152613eb781876139c1565b90508281036040840152613ecb8186613e38565b91505082606083015295945050505050565b83815260608101613ef16020830185613644565b826040830152949350505050565b600060208284031215613f1157600080fd5b815180151581146115e657600080fd5b84815260ff84166020820152826040820152608060608201526000610e3a60808301846132a1565b85815260ff8516602082015283604082015260a060608201526000613f7160a08301856132a1565b828103608084015261127b81856132a1565b80820180821115610a6757610a67613d73565b60006101208b8352602060018060a01b038c1681850152816040850152613fbf8285018c613dfe565b91508382036060850152613fd3828b6139c1565b915083820360808501528189518084528284019150828160051b850101838c0160005b8381101561402457601f198784030185526140128383516132a1565b94860194925090850190600101613ff6565b505086810360a0880152614038818c613e38565b9450505050508560c08401528460e084015282810361010084015261405d81856132a1565b9c9b505050505050505050505050565b60006020828403121561407f57600080fd5b5051919050565b8082028115828204841417610a6757610a67613d73565b634e487b7160e01b600052601260045260246000fd5b6000826140d057634e487b7160e01b600052601260045260246000fd5b500490565b60a0815260006140e860a0830188613dfe565b82810360208401526140fa81886139c1565b9050828103604084015261410e8187613e38565b60608401959095525050608001529392505050565b60c08152600061413660c0830189613dfe565b828103602084015261414881896139c1565b9050828103604084015261415c8188613e38565b60608401969096525050608081019290925260a0909101529392505050565b828152604060208201526000610f2760408301846132a1565b600082516141a681846020870161327d565b9190910192915050565b60ff8181168382160190811115610a6757610a67613d73565b600181815b808511156142045781600019048211156141ea576141ea613d73565b808516156141f757918102915b93841c93908002906141ce565b509250929050565b60008261421b57506001610a67565b8161422857506000610a67565b816001811461423e576002811461424857614264565b6001915050610a67565b60ff84111561425957614259613d73565b50506001821b610a67565b5060208310610133831016604e8410600b8410161715614287575081810a610a67565b61429183836141c9565b80600019048211156142a5576142a5613d73565b029392505050565b60006115e660ff84168361420c56fea26469706673582212207e5225747b7cf04e0aa9458d081e82f64dc7a4a4bbcdbfddb6c229e2586bbbd864736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} + } + \ No newline at end of file diff --git a/src/assets/abis/hb_evm.json b/src/assets/abis/hb_evm.json index 2b22d7b6..25dba5bd 100644 --- a/src/assets/abis/hb_evm.json +++ b/src/assets/abis/hb_evm.json @@ -3,903 +3,966 @@ "contractName": "HBEVM_token", "sourceName": "contracts/Token.sol", "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address[]", - "name": "initialMembers", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "initialAmounts", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "CheckpointUnorderedInsertion", - "type": "error" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "increasedSupply", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cap", - "type": "uint256" - } - ], - "name": "ERC20ExceededSafeSupply", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "ERC2612ExpiredSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC2612InvalidSigner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - }, - { - "internalType": "uint48", - "name": "clock", - "type": "uint48" - } - ], - "name": "ERC5805FutureLookup", - "type": "error" - }, - { - "inputs": [], - "name": "ERC6372InconsistentClock", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "currentNonce", - "type": "uint256" - } - ], - "name": "InvalidAccountNonce", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidShortString", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "bits", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SafeCastOverflowedUintDowncast", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "str", - "type": "string" - } - ], - "name": "StringTooLong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "name": "VotesExpiredSignature", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromDelegate", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "toDelegate", - "type": "address" - } - ], - "name": "DelegateChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "previousVotes", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newVotes", - "type": "uint256" - } - ], - "name": "DelegateVotesChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "CLOCK_MODE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "initialMembers", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "initialAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "CheckpointUnorderedInsertion", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "increasedSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "name": "ERC20ExceededSafeSupply", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint32", - "name": "pos", - "type": "uint32" - } - ], - "name": "checkpoints", - "outputs": [ - { - "components": [ - { - "internalType": "uint48", - "name": "_key", - "type": "uint48" - }, - { - "internalType": "uint208", - "name": "_value", - "type": "uint208" - } - ], - "internalType": "struct Checkpoints.Checkpoint208", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientBalance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC20InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC20InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC20InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "ERC20InvalidSpender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "ERC2612ExpiredSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC2612InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + }, + { + "internalType": "uint48", "name": "clock", - "outputs": [ - { - "internalType": "uint48", - "name": "", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - } - ], + "type": "uint48" + } + ], + "name": "ERC5805FutureLookup", + "type": "error" + }, + { + "inputs": [], + "name": "ERC6372InconsistentClock", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "currentNonce", + "type": "uint256" + } + ], + "name": "InvalidAccountNonce", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "bits", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SafeCastOverflowedUintDowncast", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + } + ], + "name": "VotesExpiredSignature", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "delegateBySig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "delegates", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - } - ], - "name": "getPastTotalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - } - ], - "name": "getPastVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousVotes", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newVotes", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint48", + "name": "_key", + "type": "uint48" + }, + { + "internalType": "uint208", + "name": "_value", + "type": "uint208" + } + ], + "internalType": "struct Checkpoints.Checkpoint208", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "numCheckpoints", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } ], - "bytecode": "0x6101606040523480156200001257600080fd5b506040516200583b3803806200583b8339818101604052810190620000389190620014eb565b83806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250868681600390816200008391906200181a565b5080600490816200009591906200181a565b505050620000ae6005836200021c60201b90919060201c565b6101208181525050620000cc6006826200021c60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506200010b6200027460201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050505050805182511462000190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001879062001988565b60405180910390fd5b60005b82518163ffffffff1610156200021157620001fb838263ffffffff1681518110620001c357620001c2620019aa565b5b6020026020010151838363ffffffff1681518110620001e757620001e6620019aa565b5b6020026020010151620002d160201b60201c565b8080620002089062001a18565b91505062000193565b505050505062001ec1565b600060208351101562000242576200023a836200035e60201b60201c565b90506200026e565b826200025483620003cb60201b60201c565b60000190816200026591906200181a565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001620002b695949392919062001a86565b60405160208183030381529060405280519060200120905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003465760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200033d919062001ae3565b60405180910390fd5b6200035a60008383620003d560201b60201c565b5050565b600080829050601f81511115620003ae57826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401620003a5919062001b41565b60405180910390fd5b805181620003bc9062001b97565b60001c1760001b915050919050565b6000819050919050565b620003e8838383620003ed60201b60201c565b505050565b62000400838383620004c260201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620004aa57600062000447620006f260201b60201c565b905060006200045b620006fc60201b60201c565b905080821115620004a75781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016200049e92919062001c07565b60405180910390fd5b50505b620004bd8383836200072060201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620005185780600260008282546200050b919062001c34565b92505081905550620005ee565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015620005a7578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200059e9392919062001c6f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000639578060026000828254039250508190555062000686565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006e5919062001cac565b60405180910390a3505050565b6000600254905090565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620007875762000784600a6200082660201b62000d971762000778846200083e60201b60201c565b620008af60201b60201c565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007ee57620007eb600a620008ff60201b62000dad17620007df846200083e60201b60201c565b620008af60201b60201c565b50505b6200082162000803846200091760201b60201c565b62000814846200091760201b60201c565b836200098060201b60201c565b505050565b6000818362000836919062001cef565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115620008a75760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016200089e92919062001d94565b60405180910390fd5b819050919050565b600080620008f3620008c662000c3360201b60201c565b620008e2620008db8862000c4a60201b60201c565b868860201c565b8762000cbe60201b9092919060201c565b91509150935093915050565b600081836200090f919062001dc1565b905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620009bd5750600081115b1562000c2e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000af85760008062000a67600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020620008ff60201b62000dad1762000a5b866200083e60201b60201c565b620008af60201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000aed92919062001c07565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c2d5760008062000b9c600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206200082660201b62000d971762000b90866200083e60201b60201c565b620008af60201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000c2292919062001c07565b60405180910390a250505b5b505050565b600062000c4562000ce360201b60201c565b905090565b600080826000018054905090506000811462000cb35762000c838360000160018362000c77919062001e16565b62000cfb60201b60201c565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1662000cb6565b60005b915050919050565b60008062000cd785600001858562000d1060201b60201c565b91509150935093915050565b600062000cf643620010aa60201b60201c565b905090565b60008260005281602060002001905092915050565b600080600085805490509050600081111562000fba57600062000d488760018462000d3c919062001e16565b62000cfb60201b60201c565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff16111562000e38576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff160362000ec8578462000e758860018562000e69919062001e16565b62000cfb60201b60201c565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555062000fa8565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050620010a2565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b600065ffffffffffff8016821115620010ff576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401620010f692919062001e94565b60405180910390fd5b819050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620011708262001125565b810181811067ffffffffffffffff8211171562001192576200119162001136565b5b80604052505050565b6000620011a762001107565b9050620011b5828262001165565b919050565b600067ffffffffffffffff821115620011d857620011d762001136565b5b620011e38262001125565b9050602081019050919050565b60005b8381101562001210578082015181840152602081019050620011f3565b60008484015250505050565b6000620012336200122d84620011ba565b6200119b565b90508281526020810184848401111562001252576200125162001120565b5b6200125f848285620011f0565b509392505050565b600082601f8301126200127f576200127e6200111b565b5b8151620012918482602086016200121c565b91505092915050565b600067ffffffffffffffff821115620012b857620012b762001136565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012fb82620012ce565b9050919050565b6200130d81620012ee565b81146200131957600080fd5b50565b6000815190506200132d8162001302565b92915050565b60006200134a62001344846200129a565b6200119b565b9050808382526020820190506020840283018581111562001370576200136f620012c9565b5b835b818110156200139d57806200138888826200131c565b84526020840193505060208101905062001372565b5050509392505050565b600082601f830112620013bf57620013be6200111b565b5b8151620013d184826020860162001333565b91505092915050565b600067ffffffffffffffff821115620013f857620013f762001136565b5b602082029050602081019050919050565b6000819050919050565b6200141e8162001409565b81146200142a57600080fd5b50565b6000815190506200143e8162001413565b92915050565b60006200145b6200145584620013da565b6200119b565b90508083825260208201905060208402830185811115620014815762001480620012c9565b5b835b81811015620014ae57806200149988826200142d565b84526020840193505060208101905062001483565b5050509392505050565b600082601f830112620014d057620014cf6200111b565b5b8151620014e284826020860162001444565b91505092915050565b6000806000806080858703121562001508576200150762001111565b5b600085015167ffffffffffffffff81111562001529576200152862001116565b5b620015378782880162001267565b945050602085015167ffffffffffffffff8111156200155b576200155a62001116565b5b620015698782880162001267565b935050604085015167ffffffffffffffff8111156200158d576200158c62001116565b5b6200159b87828801620013a7565b925050606085015167ffffffffffffffff811115620015bf57620015be62001116565b5b620015cd87828801620014b8565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200162c57607f821691505b602082108103620016425762001641620015e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620016ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200166d565b620016b886836200166d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620016fb620016f5620016ef8462001409565b620016d0565b62001409565b9050919050565b6000819050919050565b6200171783620016da565b6200172f620017268262001702565b8484546200167a565b825550505050565b600090565b6200174662001737565b620017538184846200170c565b505050565b5b818110156200177b576200176f6000826200173c565b60018101905062001759565b5050565b601f821115620017ca57620017948162001648565b6200179f846200165d565b81016020851015620017af578190505b620017c7620017be856200165d565b83018262001758565b50505b505050565b600082821c905092915050565b6000620017ef60001984600802620017cf565b1980831691505092915050565b60006200180a8383620017dc565b9150826002028217905092915050565b6200182582620015d9565b67ffffffffffffffff81111562001841576200184062001136565b5b6200184d825462001613565b6200185a8282856200177f565b600060209050601f8311600181146200189257600084156200187d578287015190505b620018898582620017fc565b865550620018f9565b601f198416620018a28662001648565b60005b82811015620018cc57848901518255600182019150602085019450602081019050620018a5565b86831015620018ec5784890151620018e8601f891682620017dc565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f696e697469616c416d6f756e7473206d757374206265206173206d616e79206160008201527f7320696e697469616c4d656d6265727300000000000000000000000000000000602082015250565b60006200197060308362001901565b91506200197d8262001912565b604082019050919050565b60006020820190508181036000830152620019a38162001961565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff82169050919050565b600062001a258262001a08565b915063ffffffff820362001a3e5762001a3d620019d9565b5b600182019050919050565b6000819050919050565b62001a5e8162001a49565b82525050565b62001a6f8162001409565b82525050565b62001a8081620012ee565b82525050565b600060a08201905062001a9d600083018862001a53565b62001aac602083018762001a53565b62001abb604083018662001a53565b62001aca606083018562001a64565b62001ad9608083018462001a75565b9695505050505050565b600060208201905062001afa600083018462001a75565b92915050565b600062001b0d82620015d9565b62001b19818562001901565b935062001b2b818560208601620011f0565b62001b368162001125565b840191505092915050565b6000602082019050818103600083015262001b5d818462001b00565b905092915050565b600081519050919050565b6000819050602082019050919050565b600062001b8e825162001a49565b80915050919050565b600062001ba48262001b65565b8262001bb08462001b70565b905062001bbd8162001b80565b9250602082101562001c005762001bfb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026200166d565b831692505b5050919050565b600060408201905062001c1e600083018562001a64565b62001c2d602083018462001a64565b9392505050565b600062001c418262001409565b915062001c4e8362001409565b925082820190508082111562001c695762001c68620019d9565b5b92915050565b600060608201905062001c86600083018662001a75565b62001c95602083018562001a64565b62001ca4604083018462001a64565b949350505050565b600060208201905062001cc3600083018462001a64565b92915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001cfc8262001cc9565b915062001d098362001cc9565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111562001d3e5762001d3d620019d9565b5b92915050565b6000819050919050565b600060ff82169050919050565b600062001d7c62001d7662001d708462001d44565b620016d0565b62001d4e565b9050919050565b62001d8e8162001d5b565b82525050565b600060408201905062001dab600083018562001d83565b62001dba602083018462001a64565b9392505050565b600062001dce8262001cc9565b915062001ddb8362001cc9565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111562001e105762001e0f620019d9565b5b92915050565b600062001e238262001409565b915062001e308362001409565b925082820390508181111562001e4b5762001e4a620019d9565b5b92915050565b6000819050919050565b600062001e7c62001e7662001e708462001e51565b620016d0565b62001d4e565b9050919050565b62001e8e8162001e5b565b82525050565b600060408201905062001eab600083018562001e83565b62001eba602083018462001a64565b9392505050565b60805160a05160c05160e05161010051610120516101405161391f62001f1c60003960006113c401526000611389015260006117e5015260006117c401526000610f6901526000610fbf01526000610fe8015261391f6000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c35780639ab24eb01161007c5780639ab24eb01461040b578063a9059cbb1461043b578063c3cda5201461046b578063d505accf14610487578063dd62ed3e146104a3578063f1127ed8146104d357610158565b806370a082311461031b5780637ecebe001461034b57806384b0196e1461037b5780638e539e8c1461039f57806391ddadf4146103cf57806395d89b41146103ed57610158565b80633a46b1a8116101155780633a46b1a81461023557806340c10f19146102655780634bf5d7e914610281578063587cde1e1461029f5780635c19a95c146102cf5780636fcfff45146102eb57610158565b806306fdde031461015d578063095ea7b31461017b57806318160ddd146101ab57806323b872dd146101c9578063313ce567146101f95780633644e51514610217575b600080fd5b610165610503565b6040516101729190612bc9565b60405180910390f35b61019560048036038101906101909190612c84565b610595565b6040516101a29190612cdf565b60405180910390f35b6101b36105b8565b6040516101c09190612d09565b60405180910390f35b6101e360048036038101906101de9190612d24565b6105c2565b6040516101f09190612cdf565b60405180910390f35b6102016105f1565b60405161020e9190612d93565b60405180910390f35b61021f6105fa565b60405161022c9190612dc7565b60405180910390f35b61024f600480360381019061024a9190612c84565b610609565b60405161025c9190612d09565b60405180910390f35b61027f600480360381019061027a9190612c84565b6106e2565b005b6102896106f0565b6040516102969190612bc9565b60405180910390f35b6102b960048036038101906102b49190612de2565b610784565b6040516102c69190612e1e565b60405180910390f35b6102e960048036038101906102e49190612de2565b6107ed565b005b61030560048036038101906103009190612de2565b610807565b6040516103129190612e58565b60405180910390f35b61033560048036038101906103309190612de2565b610819565b6040516103429190612d09565b60405180910390f35b61036560048036038101906103609190612de2565b610861565b6040516103729190612d09565b60405180910390f35b610383610873565b6040516103969796959493929190612f6c565b60405180910390f35b6103b960048036038101906103b49190612ff0565b61091d565b6040516103c69190612d09565b60405180910390f35b6103d76109b8565b6040516103e4919061303e565b60405180910390f35b6103f56109c7565b6040516104029190612bc9565b60405180910390f35b61042560048036038101906104209190612de2565b610a59565b6040516104329190612d09565b60405180910390f35b61045560048036038101906104509190612c84565b610ac5565b6040516104629190612cdf565b60405180910390f35b610485600480360381019061048091906130b1565b610ae8565b005b6104a1600480360381019061049c919061313e565b610bae565b005b6104bd60048036038101906104b891906131e0565b610cf6565b6040516104ca9190612d09565b60405180910390f35b6104ed60048036038101906104e8919061324c565b610d7d565b6040516104fa91906132ff565b60405180910390f35b60606003805461051290613349565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90613349565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b6000806105a0610dc3565b90506105ad818585610dcb565b600191505092915050565b6000600254905090565b6000806105cd610dc3565b90506105da858285610ddd565b6105e5858585610e71565b60019150509392505050565b60006012905090565b6000610604610f65565b905090565b6000806106146109b8565b90508065ffffffffffff1683106106645782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161065b92919061337a565b60405180910390fd5b6106bd6106708461101c565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061107690919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b6106ec8282611170565b5050565b60606106fa6111f2565b65ffffffffffff1661070a6109b8565b65ffffffffffff1614610749576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107f7610dc3565b90506108038183611202565b5050565b600061081282611316565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061086c8261136e565b9050919050565b600060608060008060006060610887611380565b61088f6113bb565b46306000801b600067ffffffffffffffff8111156108b0576108af6133a3565b5b6040519080825280602002602001820160405280156108de5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6000806109286109b8565b90508065ffffffffffff1683106109785782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161096f92919061337a565b60405180910390fd5b6109946109848461101c565b600a61107690919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b60006109c26111f2565b905090565b6060600480546109d690613349565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0290613349565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6000610aa2600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206113f6565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b600080610ad0610dc3565b9050610add818585610e71565b600191505092915050565b83421115610b2d57836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610b249190612d09565b60405180910390fd5b6000610b8f610b877fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610b6c94939291906133d2565b6040516020818303038152906040528051906020012061145e565b858585611478565b9050610b9b81876114a8565b610ba58188611202565b50505050505050565b83421115610bf357836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610bea9190612d09565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c228c611500565b89604051602001610c3896959493929190613417565b6040516020818303038152906040528051906020012090506000610c5b8261145e565b90506000610c6b82878787611478565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cdf57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610cd6929190613478565b60405180910390fd5b610cea8a8a8a610dcb565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d85612afb565b610d8f8383611557565b905092915050565b60008183610da591906134d0565b905092915050565b60008183610dbb919061351e565b905092915050565b600033905090565b610dd883838360016115b8565b505050565b6000610de98484610cf6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e6b5781811015610e5b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610e529392919061356c565b60405180910390fd5b610e6a848484840360006115b8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ee35760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610eda9190612e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f555760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f4c9190612e1e565b60405180910390fd5b610f6083838361178f565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610fe157507f000000000000000000000000000000000000000000000000000000000000000046145b1561100e577f00000000000000000000000000000000000000000000000000000000000000009050611019565b61101661179f565b90505b90565b600065ffffffffffff801682111561106e576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016110659291906135e8565b60405180910390fd5b819050919050565b6000808360000180549050905060008082905060058311156110fe57600061109d84611835565b846110a89190613611565b90506110b7876000018261192e565b60000160009054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156110ec578091506110fc565b6001816110f99190613645565b92505b505b600061110f87600001878585611943565b905060008114611161576111328760000160018361112d9190613611565b61192e565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611164565b60005b94505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111e25760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016111d99190612e1e565b60405180910390fd5b6111ee6000838361178f565b5050565b60006111fd4361101c565b905090565b600061120d83610784565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611311818361130c866119bc565b6119ce565b505050565b6000611367611362600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611c47565b611c58565b9050919050565b600061137982611cb0565b9050919050565b60606113b660057f0000000000000000000000000000000000000000000000000000000000000000611cf990919063ffffffff16565b905090565b60606113f160067f0000000000000000000000000000000000000000000000000000000000000000611cf990919063ffffffff16565b905090565b6000808260000180549050905060008114611453576114248360000160018361141f9190613611565b61192e565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611456565b60005b915050919050565b600061147161146b610f65565b83611da9565b9050919050565b60008060008061148a88888888611dea565b92509250925061149a8282611ede565b829350505050949350505050565b60006114b383611500565b90508082146114fb5782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016114f2929190613679565b60405180910390fd5b505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b61155f612afb565b6115b082600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061204290919063ffffffff16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162a5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116219190612e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169c5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116939190612e1e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611789578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516117809190612d09565b60405180910390a35b50505050565b61179a838383612117565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161181a9594939291906136a2565b60405160208183030381529060405280519060200120905090565b60008082036118475760009050611929565b60006001611854846121c8565b901c6001901b9050600181848161186e5761186d6136f5565b5b048201901c90506001818481611887576118866136f5565b5b048201901c905060018184816118a05761189f6136f5565b5b048201901c905060018184816118b9576118b86136f5565b5b048201901c905060018184816118d2576118d16136f5565b5b048201901c905060018184816118eb576118ea6136f5565b5b048201901c90506001818481611904576119036136f5565b5b048201901c90506119258182858161191f5761191e6136f5565b5b046122a9565b9150505b919050565b60008260005281602060002001905092915050565b60005b818310156119b157600061195a84846122c2565b90508465ffffffffffff1661196f878361192e565b60000160009054906101000a900465ffffffffffff1665ffffffffffff16111561199b578092506119ab565b6001816119a89190613645565b93505b50611946565b819050949350505050565b60006119c782610819565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a0a5750600081115b15611c4257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b2857600080611a99600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610dad611a94866122e8565b612356565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b1d929190613724565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c4157600080611bb2600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610d97611bad866122e8565b612356565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611c36929190613724565b60405180910390a250505b5b505050565b600081600001805490509050919050565b600063ffffffff8016821115611ca8576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611c9f929190613788565b60405180910390fd5b819050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060ff60001b8314611d1657611d0f83612396565b9050611da3565b818054611d2290613349565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4e90613349565b8015611d9b5780601f10611d7057610100808354040283529160200191611d9b565b820191906000526020600020905b815481529060010190602001808311611d7e57829003601f168201915b505050505090505b92915050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115611e2a576000600385925092509250611ed4565b600060018888888860405160008152602001604052604051611e4f94939291906137b1565b6020604051602081039080840390855afa158015611e71573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ec557600060016000801b93509350935050611ed4565b8060008060001b935093509350505b9450945094915050565b60006003811115611ef257611ef16137f6565b5b826003811115611f0557611f046137f6565b5b031561203e5760016003811115611f1f57611f1e6137f6565b5b826003811115611f3257611f316137f6565b5b03611f69576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611f7d57611f7c6137f6565b5b826003811115611f9057611f8f6137f6565b5b03611fd5578060001c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611fcc9190612d09565b60405180910390fd5b600380811115611fe857611fe76137f6565b5b826003811115611ffb57611ffa6137f6565b5b0361203d57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016120349190612dc7565b60405180910390fd5b5b5050565b61204a612afb565b826000018263ffffffff168154811061206657612065613825565b5b906000526020600020016040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61212283838361240a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121b85760006121606105b8565b9050600061216c61262f565b9050808211156121b55781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016121ac929190613724565b60405180910390fd5b50505b6121c3838383612653565b505050565b600080600090506000608084901c11156121ea57608083901c92506080810190505b6000604084901c111561220557604083901c92506040810190505b6000602084901c111561222057602083901c92506020810190505b6000601084901c111561223b57601083901c92506010810190505b6000600884901c111561225657600883901c92506008810190505b6000600484901c111561227157600483901c92506004810190505b6000600284901c111561228c57600283901c92506002810190505b6000600184901c11156122a0576001810190505b80915050919050565b60008183106122b857816122ba565b825b905092915050565b600060028284186122d39190613854565b8284166122e09190613645565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561234e5760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016123459291906138c0565b60405180910390fd5b819050919050565b60008061238a6123646109b8565b61237a612370886113f6565b868863ffffffff16565b8761270d9092919063ffffffff16565b91509150935093915050565b606060006123a38361272a565b90506000602067ffffffffffffffff8111156123c2576123c16133a3565b5b6040519080825280601f01601f1916602001820160405280156123f45781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361245c5780600260008282546124509190613645565b9250508190555061252f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124e8578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016124df9392919061356c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361257857806002600082825403925050819055506125c5565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126229190612d09565b60405180910390a3505050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126a05761269d600a610d97612698846122e8565b612356565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ed576126ea600a610dad6126e5846122e8565b612356565b50505b6127086126f984610784565b61270284610784565b836119ce565b505050565b60008061271e85600001858561277a565b91509150935093915050565b60008060ff8360001c169050601f811115612771576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6000806000858054905090506000811115612a0b5760006127a7876001846127a29190613611565b61192e565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff161115612896576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff160361291a57846128c8886001856128c39190613611565b61192e565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506129fa565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612af3565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b6040518060400160405280600065ffffffffffff168152602001600079ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b73578082015181840152602081019050612b58565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b9b82612b39565b612ba58185612b44565b9350612bb5818560208601612b55565b612bbe81612b7f565b840191505092915050565b60006020820190508181036000830152612be38184612b90565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c1b82612bf0565b9050919050565b612c2b81612c10565b8114612c3657600080fd5b50565b600081359050612c4881612c22565b92915050565b6000819050919050565b612c6181612c4e565b8114612c6c57600080fd5b50565b600081359050612c7e81612c58565b92915050565b60008060408385031215612c9b57612c9a612beb565b5b6000612ca985828601612c39565b9250506020612cba85828601612c6f565b9150509250929050565b60008115159050919050565b612cd981612cc4565b82525050565b6000602082019050612cf46000830184612cd0565b92915050565b612d0381612c4e565b82525050565b6000602082019050612d1e6000830184612cfa565b92915050565b600080600060608486031215612d3d57612d3c612beb565b5b6000612d4b86828701612c39565b9350506020612d5c86828701612c39565b9250506040612d6d86828701612c6f565b9150509250925092565b600060ff82169050919050565b612d8d81612d77565b82525050565b6000602082019050612da86000830184612d84565b92915050565b6000819050919050565b612dc181612dae565b82525050565b6000602082019050612ddc6000830184612db8565b92915050565b600060208284031215612df857612df7612beb565b5b6000612e0684828501612c39565b91505092915050565b612e1881612c10565b82525050565b6000602082019050612e336000830184612e0f565b92915050565b600063ffffffff82169050919050565b612e5281612e39565b82525050565b6000602082019050612e6d6000830184612e49565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612ea881612e73565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ee381612c4e565b82525050565b6000612ef58383612eda565b60208301905092915050565b6000602082019050919050565b6000612f1982612eae565b612f238185612eb9565b9350612f2e83612eca565b8060005b83811015612f5f578151612f468882612ee9565b9750612f5183612f01565b925050600181019050612f32565b5085935050505092915050565b600060e082019050612f81600083018a612e9f565b8181036020830152612f938189612b90565b90508181036040830152612fa78188612b90565b9050612fb66060830187612cfa565b612fc36080830186612e0f565b612fd060a0830185612db8565b81810360c0830152612fe28184612f0e565b905098975050505050505050565b60006020828403121561300657613005612beb565b5b600061301484828501612c6f565b91505092915050565b600065ffffffffffff82169050919050565b6130388161301d565b82525050565b6000602082019050613053600083018461302f565b92915050565b61306281612d77565b811461306d57600080fd5b50565b60008135905061307f81613059565b92915050565b61308e81612dae565b811461309957600080fd5b50565b6000813590506130ab81613085565b92915050565b60008060008060008060c087890312156130ce576130cd612beb565b5b60006130dc89828a01612c39565b96505060206130ed89828a01612c6f565b95505060406130fe89828a01612c6f565b945050606061310f89828a01613070565b935050608061312089828a0161309c565b92505060a061313189828a0161309c565b9150509295509295509295565b600080600080600080600060e0888a03121561315d5761315c612beb565b5b600061316b8a828b01612c39565b975050602061317c8a828b01612c39565b965050604061318d8a828b01612c6f565b955050606061319e8a828b01612c6f565b94505060806131af8a828b01613070565b93505060a06131c08a828b0161309c565b92505060c06131d18a828b0161309c565b91505092959891949750929550565b600080604083850312156131f7576131f6612beb565b5b600061320585828601612c39565b925050602061321685828601612c39565b9150509250929050565b61322981612e39565b811461323457600080fd5b50565b60008135905061324681613220565b92915050565b6000806040838503121561326357613262612beb565b5b600061327185828601612c39565b925050602061328285828601613237565b9150509250929050565b6132958161301d565b82525050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6132ca8161329b565b82525050565b6040820160008201516132e6600085018261328c565b5060208201516132f960208501826132c1565b50505050565b600060408201905061331460008301846132d0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061336157607f821691505b6020821081036133745761337361331a565b5b50919050565b600060408201905061338f6000830185612cfa565b61339c602083018461302f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080820190506133e76000830187612db8565b6133f46020830186612e0f565b6134016040830185612cfa565b61340e6060830184612cfa565b95945050505050565b600060c08201905061342c6000830189612db8565b6134396020830188612e0f565b6134466040830187612e0f565b6134536060830186612cfa565b6134606080830185612cfa565b61346d60a0830184612cfa565b979650505050505050565b600060408201905061348d6000830185612e0f565b61349a6020830184612e0f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134db8261329b565b91506134e68361329b565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613518576135176134a1565b5b92915050565b60006135298261329b565b91506135348361329b565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613566576135656134a1565b5b92915050565b60006060820190506135816000830186612e0f565b61358e6020830185612cfa565b61359b6040830184612cfa565b949350505050565b6000819050919050565b6000819050919050565b60006135d26135cd6135c8846135a3565b6135ad565b612d77565b9050919050565b6135e2816135b7565b82525050565b60006040820190506135fd60008301856135d9565b61360a6020830184612cfa565b9392505050565b600061361c82612c4e565b915061362783612c4e565b925082820390508181111561363f5761363e6134a1565b5b92915050565b600061365082612c4e565b915061365b83612c4e565b9250828201905080821115613673576136726134a1565b5b92915050565b600060408201905061368e6000830185612e0f565b61369b6020830184612cfa565b9392505050565b600060a0820190506136b76000830188612db8565b6136c46020830187612db8565b6136d16040830186612db8565b6136de6060830185612cfa565b6136eb6080830184612e0f565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006040820190506137396000830185612cfa565b6137466020830184612cfa565b9392505050565b6000819050919050565b600061377261376d6137688461374d565b6135ad565b612d77565b9050919050565b61378281613757565b82525050565b600060408201905061379d6000830185613779565b6137aa6020830184612cfa565b9392505050565b60006080820190506137c66000830187612db8565b6137d36020830186612d84565b6137e06040830185612db8565b6137ed6060830184612db8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061385f82612c4e565b915061386a83612c4e565b92508261387a576138796136f5565b5b828204905092915050565b6000819050919050565b60006138aa6138a56138a084613885565b6135ad565b612d77565b9050919050565b6138ba8161388f565b82525050565b60006040820190506138d560008301856138b1565b6138e26020830184612cfa565b939250505056fea26469706673582212207a8acb8aebf0ca70a2a2ca038f649d366444e8ce4565803973e3ab0a015303d364736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c35780639ab24eb01161007c5780639ab24eb01461040b578063a9059cbb1461043b578063c3cda5201461046b578063d505accf14610487578063dd62ed3e146104a3578063f1127ed8146104d357610158565b806370a082311461031b5780637ecebe001461034b57806384b0196e1461037b5780638e539e8c1461039f57806391ddadf4146103cf57806395d89b41146103ed57610158565b80633a46b1a8116101155780633a46b1a81461023557806340c10f19146102655780634bf5d7e914610281578063587cde1e1461029f5780635c19a95c146102cf5780636fcfff45146102eb57610158565b806306fdde031461015d578063095ea7b31461017b57806318160ddd146101ab57806323b872dd146101c9578063313ce567146101f95780633644e51514610217575b600080fd5b610165610503565b6040516101729190612bc9565b60405180910390f35b61019560048036038101906101909190612c84565b610595565b6040516101a29190612cdf565b60405180910390f35b6101b36105b8565b6040516101c09190612d09565b60405180910390f35b6101e360048036038101906101de9190612d24565b6105c2565b6040516101f09190612cdf565b60405180910390f35b6102016105f1565b60405161020e9190612d93565b60405180910390f35b61021f6105fa565b60405161022c9190612dc7565b60405180910390f35b61024f600480360381019061024a9190612c84565b610609565b60405161025c9190612d09565b60405180910390f35b61027f600480360381019061027a9190612c84565b6106e2565b005b6102896106f0565b6040516102969190612bc9565b60405180910390f35b6102b960048036038101906102b49190612de2565b610784565b6040516102c69190612e1e565b60405180910390f35b6102e960048036038101906102e49190612de2565b6107ed565b005b61030560048036038101906103009190612de2565b610807565b6040516103129190612e58565b60405180910390f35b61033560048036038101906103309190612de2565b610819565b6040516103429190612d09565b60405180910390f35b61036560048036038101906103609190612de2565b610861565b6040516103729190612d09565b60405180910390f35b610383610873565b6040516103969796959493929190612f6c565b60405180910390f35b6103b960048036038101906103b49190612ff0565b61091d565b6040516103c69190612d09565b60405180910390f35b6103d76109b8565b6040516103e4919061303e565b60405180910390f35b6103f56109c7565b6040516104029190612bc9565b60405180910390f35b61042560048036038101906104209190612de2565b610a59565b6040516104329190612d09565b60405180910390f35b61045560048036038101906104509190612c84565b610ac5565b6040516104629190612cdf565b60405180910390f35b610485600480360381019061048091906130b1565b610ae8565b005b6104a1600480360381019061049c919061313e565b610bae565b005b6104bd60048036038101906104b891906131e0565b610cf6565b6040516104ca9190612d09565b60405180910390f35b6104ed60048036038101906104e8919061324c565b610d7d565b6040516104fa91906132ff565b60405180910390f35b60606003805461051290613349565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90613349565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b6000806105a0610dc3565b90506105ad818585610dcb565b600191505092915050565b6000600254905090565b6000806105cd610dc3565b90506105da858285610ddd565b6105e5858585610e71565b60019150509392505050565b60006012905090565b6000610604610f65565b905090565b6000806106146109b8565b90508065ffffffffffff1683106106645782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161065b92919061337a565b60405180910390fd5b6106bd6106708461101c565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061107690919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b6106ec8282611170565b5050565b60606106fa6111f2565b65ffffffffffff1661070a6109b8565b65ffffffffffff1614610749576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107f7610dc3565b90506108038183611202565b5050565b600061081282611316565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061086c8261136e565b9050919050565b600060608060008060006060610887611380565b61088f6113bb565b46306000801b600067ffffffffffffffff8111156108b0576108af6133a3565b5b6040519080825280602002602001820160405280156108de5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6000806109286109b8565b90508065ffffffffffff1683106109785782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161096f92919061337a565b60405180910390fd5b6109946109848461101c565b600a61107690919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b60006109c26111f2565b905090565b6060600480546109d690613349565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0290613349565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6000610aa2600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206113f6565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b600080610ad0610dc3565b9050610add818585610e71565b600191505092915050565b83421115610b2d57836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610b249190612d09565b60405180910390fd5b6000610b8f610b877fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610b6c94939291906133d2565b6040516020818303038152906040528051906020012061145e565b858585611478565b9050610b9b81876114a8565b610ba58188611202565b50505050505050565b83421115610bf357836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610bea9190612d09565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c228c611500565b89604051602001610c3896959493929190613417565b6040516020818303038152906040528051906020012090506000610c5b8261145e565b90506000610c6b82878787611478565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cdf57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610cd6929190613478565b60405180910390fd5b610cea8a8a8a610dcb565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d85612afb565b610d8f8383611557565b905092915050565b60008183610da591906134d0565b905092915050565b60008183610dbb919061351e565b905092915050565b600033905090565b610dd883838360016115b8565b505050565b6000610de98484610cf6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e6b5781811015610e5b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610e529392919061356c565b60405180910390fd5b610e6a848484840360006115b8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ee35760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610eda9190612e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f555760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f4c9190612e1e565b60405180910390fd5b610f6083838361178f565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610fe157507f000000000000000000000000000000000000000000000000000000000000000046145b1561100e577f00000000000000000000000000000000000000000000000000000000000000009050611019565b61101661179f565b90505b90565b600065ffffffffffff801682111561106e576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016110659291906135e8565b60405180910390fd5b819050919050565b6000808360000180549050905060008082905060058311156110fe57600061109d84611835565b846110a89190613611565b90506110b7876000018261192e565b60000160009054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156110ec578091506110fc565b6001816110f99190613645565b92505b505b600061110f87600001878585611943565b905060008114611161576111328760000160018361112d9190613611565b61192e565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611164565b60005b94505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111e25760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016111d99190612e1e565b60405180910390fd5b6111ee6000838361178f565b5050565b60006111fd4361101c565b905090565b600061120d83610784565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611311818361130c866119bc565b6119ce565b505050565b6000611367611362600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611c47565b611c58565b9050919050565b600061137982611cb0565b9050919050565b60606113b660057f0000000000000000000000000000000000000000000000000000000000000000611cf990919063ffffffff16565b905090565b60606113f160067f0000000000000000000000000000000000000000000000000000000000000000611cf990919063ffffffff16565b905090565b6000808260000180549050905060008114611453576114248360000160018361141f9190613611565b61192e565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611456565b60005b915050919050565b600061147161146b610f65565b83611da9565b9050919050565b60008060008061148a88888888611dea565b92509250925061149a8282611ede565b829350505050949350505050565b60006114b383611500565b90508082146114fb5782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016114f2929190613679565b60405180910390fd5b505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b61155f612afb565b6115b082600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061204290919063ffffffff16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162a5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116219190612e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169c5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116939190612e1e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611789578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516117809190612d09565b60405180910390a35b50505050565b61179a838383612117565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161181a9594939291906136a2565b60405160208183030381529060405280519060200120905090565b60008082036118475760009050611929565b60006001611854846121c8565b901c6001901b9050600181848161186e5761186d6136f5565b5b048201901c90506001818481611887576118866136f5565b5b048201901c905060018184816118a05761189f6136f5565b5b048201901c905060018184816118b9576118b86136f5565b5b048201901c905060018184816118d2576118d16136f5565b5b048201901c905060018184816118eb576118ea6136f5565b5b048201901c90506001818481611904576119036136f5565b5b048201901c90506119258182858161191f5761191e6136f5565b5b046122a9565b9150505b919050565b60008260005281602060002001905092915050565b60005b818310156119b157600061195a84846122c2565b90508465ffffffffffff1661196f878361192e565b60000160009054906101000a900465ffffffffffff1665ffffffffffff16111561199b578092506119ab565b6001816119a89190613645565b93505b50611946565b819050949350505050565b60006119c782610819565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a0a5750600081115b15611c4257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b2857600080611a99600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610dad611a94866122e8565b612356565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b1d929190613724565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c4157600080611bb2600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610d97611bad866122e8565b612356565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611c36929190613724565b60405180910390a250505b5b505050565b600081600001805490509050919050565b600063ffffffff8016821115611ca8576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611c9f929190613788565b60405180910390fd5b819050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060ff60001b8314611d1657611d0f83612396565b9050611da3565b818054611d2290613349565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4e90613349565b8015611d9b5780601f10611d7057610100808354040283529160200191611d9b565b820191906000526020600020905b815481529060010190602001808311611d7e57829003601f168201915b505050505090505b92915050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115611e2a576000600385925092509250611ed4565b600060018888888860405160008152602001604052604051611e4f94939291906137b1565b6020604051602081039080840390855afa158015611e71573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ec557600060016000801b93509350935050611ed4565b8060008060001b935093509350505b9450945094915050565b60006003811115611ef257611ef16137f6565b5b826003811115611f0557611f046137f6565b5b031561203e5760016003811115611f1f57611f1e6137f6565b5b826003811115611f3257611f316137f6565b5b03611f69576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611f7d57611f7c6137f6565b5b826003811115611f9057611f8f6137f6565b5b03611fd5578060001c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611fcc9190612d09565b60405180910390fd5b600380811115611fe857611fe76137f6565b5b826003811115611ffb57611ffa6137f6565b5b0361203d57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016120349190612dc7565b60405180910390fd5b5b5050565b61204a612afb565b826000018263ffffffff168154811061206657612065613825565b5b906000526020600020016040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61212283838361240a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121b85760006121606105b8565b9050600061216c61262f565b9050808211156121b55781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016121ac929190613724565b60405180910390fd5b50505b6121c3838383612653565b505050565b600080600090506000608084901c11156121ea57608083901c92506080810190505b6000604084901c111561220557604083901c92506040810190505b6000602084901c111561222057602083901c92506020810190505b6000601084901c111561223b57601083901c92506010810190505b6000600884901c111561225657600883901c92506008810190505b6000600484901c111561227157600483901c92506004810190505b6000600284901c111561228c57600283901c92506002810190505b6000600184901c11156122a0576001810190505b80915050919050565b60008183106122b857816122ba565b825b905092915050565b600060028284186122d39190613854565b8284166122e09190613645565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561234e5760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016123459291906138c0565b60405180910390fd5b819050919050565b60008061238a6123646109b8565b61237a612370886113f6565b868863ffffffff16565b8761270d9092919063ffffffff16565b91509150935093915050565b606060006123a38361272a565b90506000602067ffffffffffffffff8111156123c2576123c16133a3565b5b6040519080825280601f01601f1916602001820160405280156123f45781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361245c5780600260008282546124509190613645565b9250508190555061252f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124e8578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016124df9392919061356c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361257857806002600082825403925050819055506125c5565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126229190612d09565b60405180910390a3505050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126a05761269d600a610d97612698846122e8565b612356565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ed576126ea600a610dad6126e5846122e8565b612356565b50505b6127086126f984610784565b61270284610784565b836119ce565b505050565b60008061271e85600001858561277a565b91509150935093915050565b60008060ff8360001c169050601f811115612771576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6000806000858054905090506000811115612a0b5760006127a7876001846127a29190613611565b61192e565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff161115612896576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff160361291a57846128c8886001856128c39190613611565b61192e565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506129fa565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612af3565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b6040518060400160405280600065ffffffffffff168152602001600079ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b73578082015181840152602081019050612b58565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b9b82612b39565b612ba58185612b44565b9350612bb5818560208601612b55565b612bbe81612b7f565b840191505092915050565b60006020820190508181036000830152612be38184612b90565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c1b82612bf0565b9050919050565b612c2b81612c10565b8114612c3657600080fd5b50565b600081359050612c4881612c22565b92915050565b6000819050919050565b612c6181612c4e565b8114612c6c57600080fd5b50565b600081359050612c7e81612c58565b92915050565b60008060408385031215612c9b57612c9a612beb565b5b6000612ca985828601612c39565b9250506020612cba85828601612c6f565b9150509250929050565b60008115159050919050565b612cd981612cc4565b82525050565b6000602082019050612cf46000830184612cd0565b92915050565b612d0381612c4e565b82525050565b6000602082019050612d1e6000830184612cfa565b92915050565b600080600060608486031215612d3d57612d3c612beb565b5b6000612d4b86828701612c39565b9350506020612d5c86828701612c39565b9250506040612d6d86828701612c6f565b9150509250925092565b600060ff82169050919050565b612d8d81612d77565b82525050565b6000602082019050612da86000830184612d84565b92915050565b6000819050919050565b612dc181612dae565b82525050565b6000602082019050612ddc6000830184612db8565b92915050565b600060208284031215612df857612df7612beb565b5b6000612e0684828501612c39565b91505092915050565b612e1881612c10565b82525050565b6000602082019050612e336000830184612e0f565b92915050565b600063ffffffff82169050919050565b612e5281612e39565b82525050565b6000602082019050612e6d6000830184612e49565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612ea881612e73565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ee381612c4e565b82525050565b6000612ef58383612eda565b60208301905092915050565b6000602082019050919050565b6000612f1982612eae565b612f238185612eb9565b9350612f2e83612eca565b8060005b83811015612f5f578151612f468882612ee9565b9750612f5183612f01565b925050600181019050612f32565b5085935050505092915050565b600060e082019050612f81600083018a612e9f565b8181036020830152612f938189612b90565b90508181036040830152612fa78188612b90565b9050612fb66060830187612cfa565b612fc36080830186612e0f565b612fd060a0830185612db8565b81810360c0830152612fe28184612f0e565b905098975050505050505050565b60006020828403121561300657613005612beb565b5b600061301484828501612c6f565b91505092915050565b600065ffffffffffff82169050919050565b6130388161301d565b82525050565b6000602082019050613053600083018461302f565b92915050565b61306281612d77565b811461306d57600080fd5b50565b60008135905061307f81613059565b92915050565b61308e81612dae565b811461309957600080fd5b50565b6000813590506130ab81613085565b92915050565b60008060008060008060c087890312156130ce576130cd612beb565b5b60006130dc89828a01612c39565b96505060206130ed89828a01612c6f565b95505060406130fe89828a01612c6f565b945050606061310f89828a01613070565b935050608061312089828a0161309c565b92505060a061313189828a0161309c565b9150509295509295509295565b600080600080600080600060e0888a03121561315d5761315c612beb565b5b600061316b8a828b01612c39565b975050602061317c8a828b01612c39565b965050604061318d8a828b01612c6f565b955050606061319e8a828b01612c6f565b94505060806131af8a828b01613070565b93505060a06131c08a828b0161309c565b92505060c06131d18a828b0161309c565b91505092959891949750929550565b600080604083850312156131f7576131f6612beb565b5b600061320585828601612c39565b925050602061321685828601612c39565b9150509250929050565b61322981612e39565b811461323457600080fd5b50565b60008135905061324681613220565b92915050565b6000806040838503121561326357613262612beb565b5b600061327185828601612c39565b925050602061328285828601613237565b9150509250929050565b6132958161301d565b82525050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6132ca8161329b565b82525050565b6040820160008201516132e6600085018261328c565b5060208201516132f960208501826132c1565b50505050565b600060408201905061331460008301846132d0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061336157607f821691505b6020821081036133745761337361331a565b5b50919050565b600060408201905061338f6000830185612cfa565b61339c602083018461302f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080820190506133e76000830187612db8565b6133f46020830186612e0f565b6134016040830185612cfa565b61340e6060830184612cfa565b95945050505050565b600060c08201905061342c6000830189612db8565b6134396020830188612e0f565b6134466040830187612e0f565b6134536060830186612cfa565b6134606080830185612cfa565b61346d60a0830184612cfa565b979650505050505050565b600060408201905061348d6000830185612e0f565b61349a6020830184612e0f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134db8261329b565b91506134e68361329b565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613518576135176134a1565b5b92915050565b60006135298261329b565b91506135348361329b565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613566576135656134a1565b5b92915050565b60006060820190506135816000830186612e0f565b61358e6020830185612cfa565b61359b6040830184612cfa565b949350505050565b6000819050919050565b6000819050919050565b60006135d26135cd6135c8846135a3565b6135ad565b612d77565b9050919050565b6135e2816135b7565b82525050565b60006040820190506135fd60008301856135d9565b61360a6020830184612cfa565b9392505050565b600061361c82612c4e565b915061362783612c4e565b925082820390508181111561363f5761363e6134a1565b5b92915050565b600061365082612c4e565b915061365b83612c4e565b9250828201905080821115613673576136726134a1565b5b92915050565b600060408201905061368e6000830185612e0f565b61369b6020830184612cfa565b9392505050565b600060a0820190506136b76000830188612db8565b6136c46020830187612db8565b6136d16040830186612db8565b6136de6060830185612cfa565b6136eb6080830184612e0f565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006040820190506137396000830185612cfa565b6137466020830184612cfa565b9392505050565b6000819050919050565b600061377261376d6137688461374d565b6135ad565b612d77565b9050919050565b61378281613757565b82525050565b600060408201905061379d6000830185613779565b6137aa6020830184612cfa565b9392505050565b60006080820190506137c66000830187612db8565b6137d36020830186612d84565b6137e06040830185612db8565b6137ed6060830184612db8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061385f82612c4e565b915061386a83612c4e565b92508261387a576138796136f5565b5b828204905092915050565b6000819050919050565b60006138aa6138a56138a084613885565b6135ad565b612d77565b9050919050565b6138ba8161388f565b82525050565b60006040820190506138d560008301856138b1565b6138e26020830184612cfa565b939250505056fea26469706673582212207a8acb8aebf0ca70a2a2ca038f649d366444e8ce4565803973e3ab0a015303d364736f6c63430008180033", + "bytecode": "0x6101606040523480156200001257600080fd5b5060405162002fe238038062002fe2833981016040819052620000359162000ab5565b6040805180820190915260018152603160f81b6020820152859081908187600362000061838262000c19565b50600462000070828262000c19565b506200008291508390506005620001cb565b6101205262000093816006620001cb565b61014052815160208084019190912060e052815190820120610100524660a0526200012160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250600b805460ff61ffff60a81b01191660ff851617905560005b82518163ffffffff161015620001bf57620001aa838263ffffffff168151811062000173576200017362000ce5565b6020026020010151838363ffffffff168151811062000196576200019662000ce5565b60200260200101516200020460201b60201c565b80620001b68162000d11565b91505062000144565b50505050505062000e0a565b6000602083511015620001eb57620001e38362000246565b9050620001fe565b81620001f8848262000c19565b5060ff90505b92915050565b6001600160a01b038216620002345760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620002426000838362000289565b5050565b600080829050601f8151111562000274578260405163305a27a960e01b81526004016200022b919062000d37565b8051620002818262000d6c565b179392505050565b620002968383836200029b565b505050565b620002a88383836200030a565b6001600160a01b038316620002fd576000620002c360025490565b90506001600160d01b0380821115620002fa57604051630e58ae9360e11b815260048101839052602481018290526044016200022b565b50505b620002968383836200043d565b6001600160a01b038316620003395780600260008282546200032d919062000d91565b90915550620003ad9050565b6001600160a01b038316600090815260208190526040902054818110156200038e5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016200022b565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620003cb57600280548290039055620003ea565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200043091815260200190565b60405180910390a3505050565b6001600160a01b03831662000472576200046f600a62000b4c620004d560201b176200046984620004ea565b62000524565b50505b6001600160a01b038216620004a1576200049e600a62000b586200055860201b176200046984620004ea565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054620002969291821691168362000566565b6000620004e3828462000da7565b9392505050565b60006001600160d01b0382111562000520576040516306dfcc6560e41b815260d06004820152602481018390526044016200022b565b5090565b6000806200054b42620005426200053b88620006cd565b868860201c565b8791906200071c565b915091505b935093915050565b6000620004e3828462000dd1565b816001600160a01b0316836001600160a01b031614158015620005895750600081115b1562000296576001600160a01b038316156200062c576001600160a01b038316600090815260096020908152604082208291620005d7919062000558901b62000b58176200046986620004ea565b6001600160d01b031691506001600160d01b03169150846001600160a01b031660008051602062002fc2833981519152838360405162000621929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161562000296576001600160a01b038216600090815260096020908152604082208291620006749190620004d5901b62000b4c176200046986620004ea565b6001600160d01b031691506001600160d01b03169150836001600160a01b031660008051602062002fc28339815191528383604051620006be929190918252602082015260400190565b60405180910390a25050505050565b805460009080156200071357620006f983620006eb60018462000df4565b600091825260209091200190565b54660100000000000090046001600160d01b0316620004e3565b60009392505050565b6000806200054b858585825460009081908015620008595760006200074887620006eb60018562000df4565b60408051808201909152905465ffffffffffff80821680845266010000000000009092046001600160d01b031660208401529192509087161015620007a057604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603620007f45784620007c788620006eb60018662000df4565b80546001600160d01b039290921666010000000000000265ffffffffffff90921691909117905562000848565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d815291909120945191519092166601000000000000029216919091179101555b602001519250839150620005509050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316660100000000000002919093161792019190915590508162000550565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620008f957620008f9620008b8565b604052919050565b60005b838110156200091e57818101518382015260200162000904565b50506000910152565b600082601f8301126200093957600080fd5b81516001600160401b03811115620009555762000955620008b8565b6200096a601f8201601f1916602001620008ce565b8181528460208386010111156200098057600080fd5b6200099382602083016020870162000901565b949350505050565b60006001600160401b03821115620009b757620009b7620008b8565b5060051b60200190565b600082601f830112620009d357600080fd5b81516020620009ec620009e6836200099b565b620008ce565b8083825260208201915060208460051b87010193508684111562000a0f57600080fd5b602086015b8481101562000a445780516001600160a01b038116811462000a365760008081fd5b835291830191830162000a14565b509695505050505050565b600082601f83011262000a6157600080fd5b8151602062000a74620009e6836200099b565b8083825260208201915060208460051b87010193508684111562000a9757600080fd5b602086015b8481101562000a44578051835291830191830162000a9c565b600080600080600060a0868803121562000ace57600080fd5b85516001600160401b038082111562000ae657600080fd5b62000af489838a0162000927565b9650602088015191508082111562000b0b57600080fd5b62000b1989838a0162000927565b95506040880151915060ff8216821462000b3257600080fd5b60608801519194508082111562000b4857600080fd5b62000b5689838a01620009c1565b9350608088015191508082111562000b6d57600080fd5b5062000b7c8882890162000a4f565b9150509295509295909350565b600181811c9082168062000b9e57607f821691505b60208210810362000bbf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000296576000816000526020600020601f850160051c8101602086101562000bf05750805b601f850160051c820191505b8181101562000c115782815560010162000bfc565b505050505050565b81516001600160401b0381111562000c355762000c35620008b8565b62000c4d8162000c46845462000b89565b8462000bc5565b602080601f83116001811462000c85576000841562000c6c5750858301515b600019600386901b1c1916600185901b17855562000c11565b600085815260208120601f198616915b8281101562000cb65788860151825594840194600190910190840162000c95565b508582101562000cd55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681810362000d2d5762000d2d62000cfb565b6001019392505050565b602081526000825180602084015262000d5881604085016020870162000901565b601f01601f19169190910160400192915050565b8051602080830151919081101562000bbf5760001960209190910360031b1b16919050565b80820180821115620001fe57620001fe62000cfb565b6001600160d01b0381811683821601908082111562000dca5762000dca62000cfb565b5092915050565b6001600160d01b0382811682821603908082111562000dca5762000dca62000cfb565b81810381811115620001fe57620001fe62000cfb565b60805160a05160c05160e05161010051610120516101405161215d62000e656000396000610ece01526000610ea101526000610c7401526000610c4c01526000610ba701526000610bd101526000610bfb015261215d6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f95780639dc29fac11610097578063d505accf11610071578063d505accf14610418578063dd62ed3e1461042b578063f1127ed814610464578063f851a440146104a357600080fd5b80639dc29fac146103df578063a9059cbb146103f2578063c3cda5201461040557600080fd5b80638e539e8c116100d35780638e539e8c1461039b57806391ddadf4146103ae57806395d89b41146103c45780639ab24eb0146103cc57600080fd5b806370a08231146103445780637ecebe001461036d57806384b0196e1461038057600080fd5b80633a46b1a811610166578063587cde1e11610140578063587cde1e146102b25780635c19a95c146102f65780636fcfff4514610309578063704b6c021461033157600080fd5b80633a46b1a81461026057806340c10f19146102735780634bf5d7e91461028857600080fd5b80632121dc75116101a25780632121dc751461021c57806323b872dd14610230578063313ce567146102435780633644e5151461025857600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d16104bb565b6040516101de9190611d1c565b60405180910390f35b6101fa6101f5366004611d4b565b61054d565b60405190151581526020016101de565b6002545b6040519081526020016101de565b600b546101fa90600160a81b900460ff1681565b6101fa61023e366004611d75565b610567565b600b5460405160ff90911681526020016101de565b61020e6105db565b61020e61026e366004611d4b565b6105ea565b610286610281366004611d4b565b610661565b005b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526101d1565b6102de6102c0366004611db1565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b610286610304366004611db1565b61069e565b61031c610317366004611db1565b6106a9565b60405163ffffffff90911681526020016101de565b61028661033f366004611db1565b6106b4565b61020e610352366004611db1565b6001600160a01b031660009081526020819052604090205490565b61020e61037b366004611db1565b6107a1565b6103886107ac565b6040516101de9796959493929190611dcc565b61020e6103a9366004611e65565b6107f2565b60405165ffffffffffff421681526020016101de565b6101d1610852565b61020e6103da366004611db1565b610861565b6102866103ed366004611d4b565b610891565b6101fa610400366004611d4b565b6108ca565b610286610413366004611e8f565b610937565b610286610426366004611ee7565b6109f4565b61020e610439366004611f51565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610477610472366004611f84565b610b2e565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b600b546102de9061010090046001600160a01b031681565b6060600380546104ca90611fc4565b80601f01602080910402602001604051908101604052809291908181526020018280546104f690611fc4565b80156105435780601f1061051857610100808354040283529160200191610543565b820191906000526020600020905b81548152906001019060200180831161052657829003601f168201915b5050505050905090565b60003361055b818585610b64565b60019150505b92915050565b600b54600090600160a81b900460ff166105c85760405162461bcd60e51b815260206004820181905260248201527f5472616e7366657273206172652063757272656e746c792064697361626c656460448201526064015b60405180910390fd5b6105d3848484610b76565b949350505050565b60006105e5610b9a565b905090565b60004265ffffffffffff8116831061062657604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105bf565b61065061063284610cc5565b6001600160a01b038616600090815260096020526040902090610cfc565b6001600160d01b0316949350505050565b600b5461010090046001600160a01b031633146106905760405162461bcd60e51b81526004016105bf90611ffe565b61069a8282610db2565b5050565b3361069a8183610de8565b600061056182610e5a565b600b5461010090046001600160a01b0316156107125760405162461bcd60e51b815260206004820152601a60248201527f41646d696e2068617320616c7265616479206265656e2073657400000000000060448201526064016105bf565b6001600160a01b0381166107685760405162461bcd60e51b815260206004820181905260248201527f4e65772061646d696e20616464726573732063616e6e6f74206265207a65726f60448201526064016105bf565b600b805460ff60b01b196001600160a01b03909316610100029290921661010061ff0160a81b031990921691909117600160b01b179055565b600061056182610e7c565b6000606080600080600060606107c0610e9a565b6107c8610ec7565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60004265ffffffffffff8116831061082e57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105bf565b61084261083a84610cc5565b600a90610cfc565b6001600160d01b03169392505050565b6060600480546104ca90611fc4565b6001600160a01b038116600090815260096020526040812061088290610ef4565b6001600160d01b031692915050565b600b5461010090046001600160a01b031633146108c05760405162461bcd60e51b81526004016105bf90611ffe565b61069a8282610f2d565b600b54600090600160a81b900460ff166109265760405162461bcd60e51b815260206004820181905260248201527f5472616e7366657273206172652063757272656e746c792064697361626c656460448201526064016105bf565b6109308383610f63565b9392505050565b8342111561095b57604051632341d78760e11b8152600481018590526024016105bf565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906109d5906109cd9060a00160405160208183030381529060405280519060200120610f71565b858585610f9e565b90506109e18187610fcc565b6109eb8188610de8565b50505050505050565b83421115610a185760405163313c898160e11b8152600481018590526024016105bf565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610a658c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ac082610f71565b90506000610ad082878787610f9e565b9050896001600160a01b0316816001600160a01b031614610b17576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105bf565b610b228a8a8a610b64565b50505050505050505050565b6040805180820190915260008082526020820152610930838361101f565b60006109308284612056565b6000610930828461207d565b610b718383836001611055565b505050565b600033610b8485828561112b565b610b8f8585856111a3565b506001949350505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610bf357507f000000000000000000000000000000000000000000000000000000000000000046145b15610c1d57507f000000000000000000000000000000000000000000000000000000000000000090565b6105e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610cf8576040516306dfcc6560e41b815260306004820152602481018390526044016105bf565b5090565b815460009081816005811115610d5b576000610d1784611202565b610d21908561209d565b60008881526020902090915081015465ffffffffffff9081169087161015610d4b57809150610d59565b610d568160016120b0565b92505b505b6000610d69878785856112ea565b90508015610da457610d8e87610d8060018461209d565b600091825260209091200190565b54600160301b90046001600160d01b0316610da7565b60005b979650505050505050565b6001600160a01b038216610ddc5760405163ec442f0560e01b8152600060048201526024016105bf565b61069a6000838361134c565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610b718183610e5586611357565b611375565b6001600160a01b038116600090815260096020526040812054610561906114e1565b6001600160a01b038116600090815260076020526040812054610561565b60606105e57f00000000000000000000000000000000000000000000000000000000000000006005611512565b60606105e57f00000000000000000000000000000000000000000000000000000000000000006006611512565b80546000908015610f2457610f0e83610d8060018461209d565b54600160301b90046001600160d01b0316610930565b60009392505050565b6001600160a01b038216610f5757604051634b637e8f60e11b8152600060048201526024016105bf565b61069a8260008361134c565b60003361055b8185856111a3565b6000610561610f7e610b9a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fb0888888886115bd565b925092509250610fc0828261168c565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610b71576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105bf565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109309083611745565b6001600160a01b03841661107f5760405163e602df0560e01b8152600060048201526024016105bf565b6001600160a01b0383166110a957604051634a1406b160e11b8152600060048201526024016105bf565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561112557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161111c91815260200190565b60405180910390a35b50505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611125578181101561119457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105bf565b61112584848484036000611055565b6001600160a01b0383166111cd57604051634b637e8f60e11b8152600060048201526024016105bf565b6001600160a01b0382166111f75760405163ec442f0560e01b8152600060048201526024016105bf565b610b7183838361134c565b60008160000361121457506000919050565b60006001611221846117b5565b901c6001901b9050600181848161123a5761123a6120c3565b048201901c90506001818481611252576112526120c3565b048201901c9050600181848161126a5761126a6120c3565b048201901c90506001818481611282576112826120c3565b048201901c9050600181848161129a5761129a6120c3565b048201901c905060018184816112b2576112b26120c3565b048201901c905060018184816112ca576112ca6120c3565b048201901c9050610930818285816112e4576112e46120c3565b04611849565b60005b81831015611344576000611301848461185f565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156113305780925061133e565b61133b8160016120b0565b93505b506112ed565b509392505050565b610b7183838361187a565b6001600160a01b038116600090815260208190526040812054610561565b816001600160a01b0316836001600160a01b0316141580156113975750600081115b15610b71576001600160a01b0383161561143f576001600160a01b038316600090815260096020526040812081906113da90610b586113d5866118e1565b611915565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611434929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b71576001600160a01b0382166000908152600960205260408120819061147890610b4c6113d5866118e1565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516114d2929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610cf8576040516306dfcc6560e41b815260206004820152602481018390526044016105bf565b606060ff831461152c5761152583611947565b9050610561565b81805461153890611fc4565b80601f016020809104026020016040519081016040528092919081815260200182805461156490611fc4565b80156115b15780601f10611586576101008083540402835291602001916115b1565b820191906000526020600020905b81548152906001019060200180831161159457829003601f168201915b50505050509050610561565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156115f85750600091506003905082611682565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561164c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661167857506000925060019150829050611682565b9250600091508190505b9450945094915050565b60008260038111156116a0576116a06120d9565b036116a9575050565b60018260038111156116bd576116bd6120d9565b036116db5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156116ef576116ef6120d9565b036117105760405163fce698f760e01b8152600481018290526024016105bf565b6003826003811115611724576117246120d9565b0361069a576040516335e2f38360e21b8152600481018290526024016105bf565b6040805180820190915260008082526020820152826000018263ffffffff1681548110611774576117746120ef565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b600080608083901c156117ca57608092831c92015b604083901c156117dc57604092831c92015b602083901c156117ee57602092831c92015b601083901c1561180057601092831c92015b600883901c1561181257600892831c92015b600483901c1561182457600492831c92015b600283901c1561183657600292831c92015b600183901c156105615760010192915050565b60008183106118585781610930565b5090919050565b600061186e6002848418612105565b610930908484166120b0565b611885838383611986565b6001600160a01b0383166118d657600061189e60025490565b90506001600160d01b03808211156118d357604051630e58ae9360e11b815260048101839052602481018290526044016105bf565b50505b610b71838383611ab0565b60006001600160d01b03821115610cf8576040516306dfcc6560e41b815260d06004820152602481018390526044016105bf565b60008061193a4261193261192888610ef4565b868863ffffffff16565b879190611b26565b915091505b935093915050565b6060600061195483611b34565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166119b15780600260008282546119a691906120b0565b90915550611a239050565b6001600160a01b03831660009081526020819052604090205481811015611a045760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105bf565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216611a3f57600280548290039055611a5e565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611aa391815260200190565b60405180910390a3505050565b6001600160a01b038316611ad257611acf600a610b4c6113d5846118e1565b50505b6001600160a01b038216611af457611af1600a610b586113d5846118e1565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610b7192918216911683611375565b60008061193a858585611b5c565b600060ff8216601f81111561056157604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611c7b576000611b7a87610d8060018561209d565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611bce57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611c1a5784611bf188610d8060018661209d565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611c6b565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b60200151925083915061193f9050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b02919093161792019190915590508161193f565b6000815180845260005b81811015611cfc57602081850181015186830182015201611ce0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109306020830184611cd6565b80356001600160a01b0381168114611d4657600080fd5b919050565b60008060408385031215611d5e57600080fd5b611d6783611d2f565b946020939093013593505050565b600080600060608486031215611d8a57600080fd5b611d9384611d2f565b9250611da160208501611d2f565b9150604084013590509250925092565b600060208284031215611dc357600080fd5b61093082611d2f565b60ff60f81b881681526000602060e06020840152611ded60e084018a611cd6565b8381036040850152611dff818a611cd6565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611e5357835183529284019291840191600101611e37565b50909c9b505050505050505050505050565b600060208284031215611e7757600080fd5b5035919050565b803560ff81168114611d4657600080fd5b60008060008060008060c08789031215611ea857600080fd5b611eb187611d2f565b95506020870135945060408701359350611ecd60608801611e7e565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611f0257600080fd5b611f0b88611d2f565b9650611f1960208901611d2f565b95506040880135945060608801359350611f3560808901611e7e565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611f6457600080fd5b611f6d83611d2f565b9150611f7b60208401611d2f565b90509250929050565b60008060408385031215611f9757600080fd5b611fa083611d2f565b9150602083013563ffffffff81168114611fb957600080fd5b809150509250929050565b600181811c90821680611fd857607f821691505b602082108103611ff857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4f6e6c792061646d696e2063616e20706572666f726d2074686973206163746960408201526137b760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6001600160d01b0381811683821601908082111561207657612076612040565b5092915050565b6001600160d01b0382811682821603908082111561207657612076612040565b8181038181111561056157610561612040565b8082018082111561056157610561612040565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008261212257634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015e78c8ed87ea28c6abfd07c63b99fae4e885dc312d3d5a4c5d91ec0a913192964736f6c63430008180033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f95780639dc29fac11610097578063d505accf11610071578063d505accf14610418578063dd62ed3e1461042b578063f1127ed814610464578063f851a440146104a357600080fd5b80639dc29fac146103df578063a9059cbb146103f2578063c3cda5201461040557600080fd5b80638e539e8c116100d35780638e539e8c1461039b57806391ddadf4146103ae57806395d89b41146103c45780639ab24eb0146103cc57600080fd5b806370a08231146103445780637ecebe001461036d57806384b0196e1461038057600080fd5b80633a46b1a811610166578063587cde1e11610140578063587cde1e146102b25780635c19a95c146102f65780636fcfff4514610309578063704b6c021461033157600080fd5b80633a46b1a81461026057806340c10f19146102735780634bf5d7e91461028857600080fd5b80632121dc75116101a25780632121dc751461021c57806323b872dd14610230578063313ce567146102435780633644e5151461025857600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d16104bb565b6040516101de9190611d1c565b60405180910390f35b6101fa6101f5366004611d4b565b61054d565b60405190151581526020016101de565b6002545b6040519081526020016101de565b600b546101fa90600160a81b900460ff1681565b6101fa61023e366004611d75565b610567565b600b5460405160ff90911681526020016101de565b61020e6105db565b61020e61026e366004611d4b565b6105ea565b610286610281366004611d4b565b610661565b005b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526101d1565b6102de6102c0366004611db1565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b610286610304366004611db1565b61069e565b61031c610317366004611db1565b6106a9565b60405163ffffffff90911681526020016101de565b61028661033f366004611db1565b6106b4565b61020e610352366004611db1565b6001600160a01b031660009081526020819052604090205490565b61020e61037b366004611db1565b6107a1565b6103886107ac565b6040516101de9796959493929190611dcc565b61020e6103a9366004611e65565b6107f2565b60405165ffffffffffff421681526020016101de565b6101d1610852565b61020e6103da366004611db1565b610861565b6102866103ed366004611d4b565b610891565b6101fa610400366004611d4b565b6108ca565b610286610413366004611e8f565b610937565b610286610426366004611ee7565b6109f4565b61020e610439366004611f51565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610477610472366004611f84565b610b2e565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b600b546102de9061010090046001600160a01b031681565b6060600380546104ca90611fc4565b80601f01602080910402602001604051908101604052809291908181526020018280546104f690611fc4565b80156105435780601f1061051857610100808354040283529160200191610543565b820191906000526020600020905b81548152906001019060200180831161052657829003601f168201915b5050505050905090565b60003361055b818585610b64565b60019150505b92915050565b600b54600090600160a81b900460ff166105c85760405162461bcd60e51b815260206004820181905260248201527f5472616e7366657273206172652063757272656e746c792064697361626c656460448201526064015b60405180910390fd5b6105d3848484610b76565b949350505050565b60006105e5610b9a565b905090565b60004265ffffffffffff8116831061062657604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105bf565b61065061063284610cc5565b6001600160a01b038616600090815260096020526040902090610cfc565b6001600160d01b0316949350505050565b600b5461010090046001600160a01b031633146106905760405162461bcd60e51b81526004016105bf90611ffe565b61069a8282610db2565b5050565b3361069a8183610de8565b600061056182610e5a565b600b5461010090046001600160a01b0316156107125760405162461bcd60e51b815260206004820152601a60248201527f41646d696e2068617320616c7265616479206265656e2073657400000000000060448201526064016105bf565b6001600160a01b0381166107685760405162461bcd60e51b815260206004820181905260248201527f4e65772061646d696e20616464726573732063616e6e6f74206265207a65726f60448201526064016105bf565b600b805460ff60b01b196001600160a01b03909316610100029290921661010061ff0160a81b031990921691909117600160b01b179055565b600061056182610e7c565b6000606080600080600060606107c0610e9a565b6107c8610ec7565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60004265ffffffffffff8116831061082e57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105bf565b61084261083a84610cc5565b600a90610cfc565b6001600160d01b03169392505050565b6060600480546104ca90611fc4565b6001600160a01b038116600090815260096020526040812061088290610ef4565b6001600160d01b031692915050565b600b5461010090046001600160a01b031633146108c05760405162461bcd60e51b81526004016105bf90611ffe565b61069a8282610f2d565b600b54600090600160a81b900460ff166109265760405162461bcd60e51b815260206004820181905260248201527f5472616e7366657273206172652063757272656e746c792064697361626c656460448201526064016105bf565b6109308383610f63565b9392505050565b8342111561095b57604051632341d78760e11b8152600481018590526024016105bf565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906109d5906109cd9060a00160405160208183030381529060405280519060200120610f71565b858585610f9e565b90506109e18187610fcc565b6109eb8188610de8565b50505050505050565b83421115610a185760405163313c898160e11b8152600481018590526024016105bf565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610a658c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ac082610f71565b90506000610ad082878787610f9e565b9050896001600160a01b0316816001600160a01b031614610b17576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105bf565b610b228a8a8a610b64565b50505050505050505050565b6040805180820190915260008082526020820152610930838361101f565b60006109308284612056565b6000610930828461207d565b610b718383836001611055565b505050565b600033610b8485828561112b565b610b8f8585856111a3565b506001949350505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610bf357507f000000000000000000000000000000000000000000000000000000000000000046145b15610c1d57507f000000000000000000000000000000000000000000000000000000000000000090565b6105e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610cf8576040516306dfcc6560e41b815260306004820152602481018390526044016105bf565b5090565b815460009081816005811115610d5b576000610d1784611202565b610d21908561209d565b60008881526020902090915081015465ffffffffffff9081169087161015610d4b57809150610d59565b610d568160016120b0565b92505b505b6000610d69878785856112ea565b90508015610da457610d8e87610d8060018461209d565b600091825260209091200190565b54600160301b90046001600160d01b0316610da7565b60005b979650505050505050565b6001600160a01b038216610ddc5760405163ec442f0560e01b8152600060048201526024016105bf565b61069a6000838361134c565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610b718183610e5586611357565b611375565b6001600160a01b038116600090815260096020526040812054610561906114e1565b6001600160a01b038116600090815260076020526040812054610561565b60606105e57f00000000000000000000000000000000000000000000000000000000000000006005611512565b60606105e57f00000000000000000000000000000000000000000000000000000000000000006006611512565b80546000908015610f2457610f0e83610d8060018461209d565b54600160301b90046001600160d01b0316610930565b60009392505050565b6001600160a01b038216610f5757604051634b637e8f60e11b8152600060048201526024016105bf565b61069a8260008361134c565b60003361055b8185856111a3565b6000610561610f7e610b9a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fb0888888886115bd565b925092509250610fc0828261168c565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610b71576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105bf565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109309083611745565b6001600160a01b03841661107f5760405163e602df0560e01b8152600060048201526024016105bf565b6001600160a01b0383166110a957604051634a1406b160e11b8152600060048201526024016105bf565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561112557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161111c91815260200190565b60405180910390a35b50505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611125578181101561119457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105bf565b61112584848484036000611055565b6001600160a01b0383166111cd57604051634b637e8f60e11b8152600060048201526024016105bf565b6001600160a01b0382166111f75760405163ec442f0560e01b8152600060048201526024016105bf565b610b7183838361134c565b60008160000361121457506000919050565b60006001611221846117b5565b901c6001901b9050600181848161123a5761123a6120c3565b048201901c90506001818481611252576112526120c3565b048201901c9050600181848161126a5761126a6120c3565b048201901c90506001818481611282576112826120c3565b048201901c9050600181848161129a5761129a6120c3565b048201901c905060018184816112b2576112b26120c3565b048201901c905060018184816112ca576112ca6120c3565b048201901c9050610930818285816112e4576112e46120c3565b04611849565b60005b81831015611344576000611301848461185f565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156113305780925061133e565b61133b8160016120b0565b93505b506112ed565b509392505050565b610b7183838361187a565b6001600160a01b038116600090815260208190526040812054610561565b816001600160a01b0316836001600160a01b0316141580156113975750600081115b15610b71576001600160a01b0383161561143f576001600160a01b038316600090815260096020526040812081906113da90610b586113d5866118e1565b611915565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611434929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b71576001600160a01b0382166000908152600960205260408120819061147890610b4c6113d5866118e1565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516114d2929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610cf8576040516306dfcc6560e41b815260206004820152602481018390526044016105bf565b606060ff831461152c5761152583611947565b9050610561565b81805461153890611fc4565b80601f016020809104026020016040519081016040528092919081815260200182805461156490611fc4565b80156115b15780601f10611586576101008083540402835291602001916115b1565b820191906000526020600020905b81548152906001019060200180831161159457829003601f168201915b50505050509050610561565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156115f85750600091506003905082611682565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561164c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661167857506000925060019150829050611682565b9250600091508190505b9450945094915050565b60008260038111156116a0576116a06120d9565b036116a9575050565b60018260038111156116bd576116bd6120d9565b036116db5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156116ef576116ef6120d9565b036117105760405163fce698f760e01b8152600481018290526024016105bf565b6003826003811115611724576117246120d9565b0361069a576040516335e2f38360e21b8152600481018290526024016105bf565b6040805180820190915260008082526020820152826000018263ffffffff1681548110611774576117746120ef565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b600080608083901c156117ca57608092831c92015b604083901c156117dc57604092831c92015b602083901c156117ee57602092831c92015b601083901c1561180057601092831c92015b600883901c1561181257600892831c92015b600483901c1561182457600492831c92015b600283901c1561183657600292831c92015b600183901c156105615760010192915050565b60008183106118585781610930565b5090919050565b600061186e6002848418612105565b610930908484166120b0565b611885838383611986565b6001600160a01b0383166118d657600061189e60025490565b90506001600160d01b03808211156118d357604051630e58ae9360e11b815260048101839052602481018290526044016105bf565b50505b610b71838383611ab0565b60006001600160d01b03821115610cf8576040516306dfcc6560e41b815260d06004820152602481018390526044016105bf565b60008061193a4261193261192888610ef4565b868863ffffffff16565b879190611b26565b915091505b935093915050565b6060600061195483611b34565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166119b15780600260008282546119a691906120b0565b90915550611a239050565b6001600160a01b03831660009081526020819052604090205481811015611a045760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105bf565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216611a3f57600280548290039055611a5e565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611aa391815260200190565b60405180910390a3505050565b6001600160a01b038316611ad257611acf600a610b4c6113d5846118e1565b50505b6001600160a01b038216611af457611af1600a610b586113d5846118e1565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610b7192918216911683611375565b60008061193a858585611b5c565b600060ff8216601f81111561056157604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611c7b576000611b7a87610d8060018561209d565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611bce57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611c1a5784611bf188610d8060018661209d565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611c6b565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b60200151925083915061193f9050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b02919093161792019190915590508161193f565b6000815180845260005b81811015611cfc57602081850181015186830182015201611ce0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109306020830184611cd6565b80356001600160a01b0381168114611d4657600080fd5b919050565b60008060408385031215611d5e57600080fd5b611d6783611d2f565b946020939093013593505050565b600080600060608486031215611d8a57600080fd5b611d9384611d2f565b9250611da160208501611d2f565b9150604084013590509250925092565b600060208284031215611dc357600080fd5b61093082611d2f565b60ff60f81b881681526000602060e06020840152611ded60e084018a611cd6565b8381036040850152611dff818a611cd6565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611e5357835183529284019291840191600101611e37565b50909c9b505050505050505050505050565b600060208284031215611e7757600080fd5b5035919050565b803560ff81168114611d4657600080fd5b60008060008060008060c08789031215611ea857600080fd5b611eb187611d2f565b95506020870135945060408701359350611ecd60608801611e7e565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611f0257600080fd5b611f0b88611d2f565b9650611f1960208901611d2f565b95506040880135945060608801359350611f3560808901611e7e565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611f6457600080fd5b611f6d83611d2f565b9150611f7b60208401611d2f565b90509250929050565b60008060408385031215611f9757600080fd5b611fa083611d2f565b9150602083013563ffffffff81168114611fb957600080fd5b809150509250929050565b600181811c90821680611fd857607f821691505b602082108103611ff857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4f6e6c792061646d696e2063616e20706572666f726d2074686973206163746960408201526137b760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6001600160d01b0381811683821601908082111561207657612076612040565b5092915050565b6001600160d01b0382811682821603908082111561207657612076612040565b8181038181111561056157610561612040565b8082018082111561056157610561612040565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008261212257634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015e78c8ed87ea28c6abfd07c63b99fae4e885dc312d3d5a4c5d91ec0a913192964736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} -} \ No newline at end of file + } + \ No newline at end of file diff --git a/src/assets/abis/hb_timelock.json b/src/assets/abis/hb_timelock.json new file mode 100644 index 00000000..ccebf86e --- /dev/null +++ b/src/assets/abis/hb_timelock.json @@ -0,0 +1,55 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TimelockFactory", + "sourceName": "contracts/Factories.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "uint256", + "name": "executionDelay", + "type": "uint256" + } + ], + "name": "deployTimelock", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "deployedTimelocks", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5061206c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631ecbdf631461003b5780638c9513bb1461006a575b600080fd5b61004e610049366004610147565b61007d565b6040516001600160a01b03909116815260200160405180910390f35b61004e610078366004610160565b6100a7565b6000818154811061008d57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006060806000848383886040516100be9061013a565b6100cb94939291906101dd565b604051809103906000f0801580156100e7573d6000803e3d6000fd5b50600080546001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0383161790559695505050505050565b611e148061022383390190565b60006020828403121561015957600080fd5b5035919050565b6000806040838503121561017357600080fd5b82356001600160a01b038116811461018a57600080fd5b946020939093013593505050565b60008151808452602080850194506020840160005b838110156101d25781516001600160a01b0316875295820195908201906001016101ad565b509495945050505050565b8481526080602082015260006101f66080830186610198565b82810360408401526102088186610198565b91505060018060a01b03831660608301529594505050505056fe60806040523480156200001157600080fd5b5060405162001e1438038062001e1483398101604081905262000034916200032f565b620000416000306200019d565b506001600160a01b0381161562000061576200005f6000826200019d565b505b60005b83518110156200010157620000bc7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1858381518110620000a857620000a8620003b6565b60200260200101516200019d60201b60201c565b50620000f77ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783858381518110620000a857620000a8620003b6565b5060010162000064565b5060005b82518110156200015357620001497fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63848381518110620000a857620000a8620003b6565b5060010162000105565b5060028490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050620003cc565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000242576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620001f93390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000246565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200027a57600080fd5b919050565b600082601f8301126200029157600080fd5b815160206001600160401b0380831115620002b057620002b06200024c565b8260051b604051601f19603f83011681018181108482111715620002d857620002d86200024c565b6040529384526020818701810194908101925087851115620002f957600080fd5b6020870191505b848210156200032457620003148262000262565b8352918301919083019062000300565b979650505050505050565b600080600080608085870312156200034657600080fd5b845160208601519094506001600160401b03808211156200036657600080fd5b62000374888389016200027f565b945060408701519150808211156200038b57600080fd5b506200039a878288016200027f565b925050620003ab6060860162000262565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b611a3880620003dc6000396000f3fe6080604052600436106101bb5760003560e01c80638065657f116100ec578063bc197c811161008a578063d547741f11610064578063d547741f1461056a578063e38335e51461058a578063f23a6e611461059d578063f27a0c92146105c957600080fd5b8063bc197c81146104f1578063c4d252f51461051d578063d45c44351461053d57600080fd5b806391d14854116100c657806391d1485414610468578063a217fddf14610488578063b08e51c01461049d578063b1c5f427146104d157600080fd5b80638065657f146103f45780638f2a0bb0146104145780638f61f4f51461043457600080fd5b80632ab0f5291161015957806336568abe1161013357806336568abe14610367578063584b153e1461038757806364d62353146103a75780637958004c146103c757600080fd5b80632ab0f529146103075780632f2ff15d1461032757806331d507501461034757600080fd5b8063134008d311610195578063134008d31461026057806313bc9f2014610273578063150b7a0214610293578063248a9ca3146102d757600080fd5b806301d5062a146101c757806301ffc9a7146101e957806307bd02651461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e23660046111ba565b6105de565b005b3480156101f557600080fd5b5061020961020436600461122e565b6106b4565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b506102527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610215565b6101e761026e366004611258565b6106c5565b34801561027f57600080fd5b5061020961028e3660046112c3565b61077a565b34801561029f57600080fd5b506102be6102ae366004611391565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610215565b3480156102e357600080fd5b506102526102f23660046112c3565b60009081526020819052604090206001015490565b34801561031357600080fd5b506102096103223660046112c3565b6107a0565b34801561033357600080fd5b506101e76103423660046113f8565b6107a9565b34801561035357600080fd5b506102096103623660046112c3565b6107d4565b34801561037357600080fd5b506101e76103823660046113f8565b6107f9565b34801561039357600080fd5b506102096103a23660046112c3565b610831565b3480156103b357600080fd5b506101e76103c23660046112c3565b610877565b3480156103d357600080fd5b506103e76103e23660046112c3565b6108ea565b604051610215919061143a565b34801561040057600080fd5b5061025261040f366004611258565b610935565b34801561042057600080fd5b506101e761042f3660046114a6565b610974565b34801561044057600080fd5b506102527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561047457600080fd5b506102096104833660046113f8565b610b02565b34801561049457600080fd5b50610252600081565b3480156104a957600080fd5b506102527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104dd57600080fd5b506102526104ec366004611557565b610b2b565b3480156104fd57600080fd5b506102be61050c36600461167e565b63bc197c8160e01b95945050505050565b34801561052957600080fd5b506101e76105383660046112c3565b610b70565b34801561054957600080fd5b506102526105583660046112c3565b60009081526001602052604090205490565b34801561057657600080fd5b506101e76105853660046113f8565b610c1b565b6101e7610598366004611557565b610c40565b3480156105a957600080fd5b506102be6105b8366004611727565b63f23a6e6160e01b95945050505050565b3480156105d557600080fd5b50600254610252565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161060881610dc7565b6000610618898989898989610935565b90506106248184610dd4565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a604051610660969594939291906117b4565b60405180910390a383156106a957807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516106a091815260200190565b60405180910390a25b505050505050505050565b60006106bf82610e68565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106f1816000610b02565b6106ff576106ff8133610e8d565b600061070f888888888888610935565b905061071b8185610eca565b61072788888888610f18565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161075f94939291906117f1565b60405180910390a361077081610f90565b5050505050505050565b600060025b610788836108ea565b600381111561079957610799611424565b1492915050565b6000600361077f565b6000828152602081905260409020600101546107c481610dc7565b6107ce8383610fbc565b50505050565b6000806107e0836108ea565b60038111156107f1576107f1611424565b141592915050565b6001600160a01b03811633146108225760405163334bd91960e11b815260040160405180910390fd5b61082c828261104e565b505050565b60008061083d836108ea565b9050600181600381111561085357610853611424565b14806108705750600281600381111561086e5761086e611424565b145b9392505050565b333081146108a85760405163e2850c5960e01b81526001600160a01b03821660048201526024015b60405180910390fd5b60025460408051918252602082018490527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150600255565b6000818152600160205260408120548060000361090a5750600092915050565b6001810361091b5750600392915050565b4281111561092c5750600192915050565b50600292915050565b6000868686868686604051602001610952969594939291906117b4565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161099e81610dc7565b88871415806109ad5750888514155b156109df576040516001624fcdef60e01b03198152600481018a9052602481018690526044810188905260640161089f565b60006109f18b8b8b8b8b8b8b8b610b2b565b90506109fd8184610dd4565b60005b8a811015610ab35780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a3d57610a3d611823565b9050602002016020810190610a529190611839565b8d8d86818110610a6457610a64611823565b905060200201358c8c87818110610a7d57610a7d611823565b9050602002810190610a8f9190611854565b8c8b604051610aa3969594939291906117b4565b60405180910390a3600101610a00565b508315610af557807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610aec91815260200190565b60405180910390a25b5050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610b4c989796959493929190611930565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b9a81610dc7565b610ba382610831565b610bdf5781610bb260026110b9565b610bbc60016110b9565b604051635ead8eb560e01b8152600481019390935217602482015260440161089f565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610c3681610dc7565b6107ce838361104e565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c6c816000610b02565b610c7a57610c7a8133610e8d565b8786141580610c895750878414155b15610cbb576040516001624fcdef60e01b0319815260048101899052602481018590526044810187905260640161089f565b6000610ccd8a8a8a8a8a8a8a8a610b2b565b9050610cd98185610eca565b60005b89811015610db15760008b8b83818110610cf857610cf8611823565b9050602002016020810190610d0d9190611839565b905060008a8a84818110610d2357610d23611823565b9050602002013590503660008a8a86818110610d4157610d41611823565b9050602002810190610d539190611854565b91509150610d6384848484610f18565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d9a94939291906117f1565b60405180910390a350505050806001019050610cdc565b50610dbb81610f90565b50505050505050505050565b610dd18133610e8d565b50565b610ddd826107d4565b15610e0f5781610ded60006110b9565b604051635ead8eb560e01b81526004810192909252602482015260440161089f565b6000610e1a60025490565b905080821015610e4757604051635433660960e01b8152600481018390526024810182905260440161089f565b610e5182426119d1565b600093845260016020526040909320929092555050565b60006001600160e01b03198216630271189760e51b14806106bf57506106bf826110dc565b610e978282610b02565b610ec65760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161089f565b5050565b610ed38261077a565b610ee25781610ded60026110b9565b8015801590610ef75750610ef5816107a0565b155b15610ec65760405163121534c360e31b81526004810182905260240161089f565b600080856001600160a01b0316858585604051610f369291906119f2565b60006040518083038185875af1925050503d8060008114610f73576040519150601f19603f3d011682016040523d82523d6000602084013e610f78565b606091505b5091509150610f878282611111565b50505050505050565b610f998161077a565b610fa85780610ded60026110b9565b600090815260016020819052604090912055565b6000610fc88383610b02565b611046576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610ffe3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016106bf565b5060006106bf565b600061105a8383610b02565b15611046576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016106bf565b60008160038111156110cd576110cd611424565b600160ff919091161b92915050565b60006001600160e01b03198216637965db0b60e01b14806106bf57506301ffc9a760e01b6001600160e01b03198316146106bf565b606082611126576111218261112d565b6106bf565b50806106bf565b80511561113d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461116d57600080fd5b919050565b60008083601f84011261118457600080fd5b5081356001600160401b0381111561119b57600080fd5b6020830191508360208285010111156111b357600080fd5b9250929050565b600080600080600080600060c0888a0312156111d557600080fd5b6111de88611156565b96506020880135955060408801356001600160401b0381111561120057600080fd5b61120c8a828b01611172565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561124057600080fd5b81356001600160e01b03198116811461087057600080fd5b60008060008060008060a0878903121561127157600080fd5b61127a87611156565b95506020870135945060408701356001600160401b0381111561129c57600080fd5b6112a889828a01611172565b979a9699509760608101359660809091013595509350505050565b6000602082840312156112d557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561131a5761131a6112dc565b604052919050565b600082601f83011261133357600080fd5b81356001600160401b0381111561134c5761134c6112dc565b61135f601f8201601f19166020016112f2565b81815284602083860101111561137457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156113a757600080fd5b6113b085611156565b93506113be60208601611156565b92506040850135915060608501356001600160401b038111156113e057600080fd5b6113ec87828801611322565b91505092959194509250565b6000806040838503121561140b57600080fd5b8235915061141b60208401611156565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016004831061145c57634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f84011261147457600080fd5b5081356001600160401b0381111561148b57600080fd5b6020830191508360208260051b85010111156111b357600080fd5b600080600080600080600080600060c08a8c0312156114c457600080fd5b89356001600160401b03808211156114db57600080fd5b6114e78d838e01611462565b909b50995060208c013591508082111561150057600080fd5b61150c8d838e01611462565b909950975060408c013591508082111561152557600080fd5b506115328c828d01611462565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561157357600080fd5b88356001600160401b038082111561158a57600080fd5b6115968c838d01611462565b909a50985060208b01359150808211156115af57600080fd5b6115bb8c838d01611462565b909850965060408b01359150808211156115d457600080fd5b506115e18b828c01611462565b999c989b509699959896976060870135966080013595509350505050565b600082601f83011261161057600080fd5b813560206001600160401b0382111561162b5761162b6112dc565b8160051b61163a8282016112f2565b928352848101820192828101908785111561165457600080fd5b83870192505b848310156116735782358252918301919083019061165a565b979650505050505050565b600080600080600060a0868803121561169657600080fd5b61169f86611156565b94506116ad60208701611156565b935060408601356001600160401b03808211156116c957600080fd5b6116d589838a016115ff565b945060608801359150808211156116eb57600080fd5b6116f789838a016115ff565b9350608088013591508082111561170d57600080fd5b5061171a88828901611322565b9150509295509295909350565b600080600080600060a0868803121561173f57600080fd5b61174886611156565b945061175660208701611156565b9350604086013592506060860135915060808601356001600160401b0381111561177f57600080fd5b61171a88828901611322565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a0604082015260006117dc60a08301868861178b565b60608301949094525060800152949350505050565b60018060a01b038516815283602082015260606040820152600061181960608301848661178b565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184b57600080fd5b61087082611156565b6000808335601e1984360301811261186b57600080fd5b8301803591506001600160401b0382111561188557600080fd5b6020019150368190038213156111b357600080fd5b6000838385526020808601955060208560051b8301018460005b8781101561192357848303601f19018952813536889003601e190181126118da57600080fd5b870184810190356001600160401b038111156118f557600080fd5b80360382131561190457600080fd5b61190f85828461178b565b9a86019a94505050908301906001016118b4565b5090979650505050505050565b60a0808252810188905260008960c08301825b8b811015611971576001600160a01b0361195c84611156565b16825260209283019290910190600101611943565b5083810360208501528881526001600160fb1b0389111561199157600080fd5b8860051b9150818a602083013701828103602090810160408501526119b9908201878961189a565b60608401959095525050608001529695505050505050565b808201808211156106bf57634e487b7160e01b600052601160045260246000fd5b818382376000910190815291905056fea26469706673582212208b7d4906d8ae4a7bcf3f7e4af04af3a5811504f1ac624afa8e9ba6dbbcc6136464736f6c63430008180033a26469706673582212205911324004849c77445c3b2494cdf0d7b6b43f3d39e91829d2efd16f6c8e7de064736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80631ecbdf631461003b5780638c9513bb1461006a575b600080fd5b61004e610049366004610147565b61007d565b6040516001600160a01b03909116815260200160405180910390f35b61004e610078366004610160565b6100a7565b6000818154811061008d57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006060806000848383886040516100be9061013a565b6100cb94939291906101dd565b604051809103906000f0801580156100e7573d6000803e3d6000fd5b50600080546001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0383161790559695505050505050565b611e148061022383390190565b60006020828403121561015957600080fd5b5035919050565b6000806040838503121561017357600080fd5b82356001600160a01b038116811461018a57600080fd5b946020939093013593505050565b60008151808452602080850194506020840160005b838110156101d25781516001600160a01b0316875295820195908201906001016101ad565b509495945050505050565b8481526080602082015260006101f66080830186610198565b82810360408401526102088186610198565b91505060018060a01b03831660608301529594505050505056fe60806040523480156200001157600080fd5b5060405162001e1438038062001e1483398101604081905262000034916200032f565b620000416000306200019d565b506001600160a01b0381161562000061576200005f6000826200019d565b505b60005b83518110156200010157620000bc7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1858381518110620000a857620000a8620003b6565b60200260200101516200019d60201b60201c565b50620000f77ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783858381518110620000a857620000a8620003b6565b5060010162000064565b5060005b82518110156200015357620001497fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63848381518110620000a857620000a8620003b6565b5060010162000105565b5060028490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050620003cc565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000242576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620001f93390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000246565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200027a57600080fd5b919050565b600082601f8301126200029157600080fd5b815160206001600160401b0380831115620002b057620002b06200024c565b8260051b604051601f19603f83011681018181108482111715620002d857620002d86200024c565b6040529384526020818701810194908101925087851115620002f957600080fd5b6020870191505b848210156200032457620003148262000262565b8352918301919083019062000300565b979650505050505050565b600080600080608085870312156200034657600080fd5b845160208601519094506001600160401b03808211156200036657600080fd5b62000374888389016200027f565b945060408701519150808211156200038b57600080fd5b506200039a878288016200027f565b925050620003ab6060860162000262565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b611a3880620003dc6000396000f3fe6080604052600436106101bb5760003560e01c80638065657f116100ec578063bc197c811161008a578063d547741f11610064578063d547741f1461056a578063e38335e51461058a578063f23a6e611461059d578063f27a0c92146105c957600080fd5b8063bc197c81146104f1578063c4d252f51461051d578063d45c44351461053d57600080fd5b806391d14854116100c657806391d1485414610468578063a217fddf14610488578063b08e51c01461049d578063b1c5f427146104d157600080fd5b80638065657f146103f45780638f2a0bb0146104145780638f61f4f51461043457600080fd5b80632ab0f5291161015957806336568abe1161013357806336568abe14610367578063584b153e1461038757806364d62353146103a75780637958004c146103c757600080fd5b80632ab0f529146103075780632f2ff15d1461032757806331d507501461034757600080fd5b8063134008d311610195578063134008d31461026057806313bc9f2014610273578063150b7a0214610293578063248a9ca3146102d757600080fd5b806301d5062a146101c757806301ffc9a7146101e957806307bd02651461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e23660046111ba565b6105de565b005b3480156101f557600080fd5b5061020961020436600461122e565b6106b4565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b506102527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610215565b6101e761026e366004611258565b6106c5565b34801561027f57600080fd5b5061020961028e3660046112c3565b61077a565b34801561029f57600080fd5b506102be6102ae366004611391565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610215565b3480156102e357600080fd5b506102526102f23660046112c3565b60009081526020819052604090206001015490565b34801561031357600080fd5b506102096103223660046112c3565b6107a0565b34801561033357600080fd5b506101e76103423660046113f8565b6107a9565b34801561035357600080fd5b506102096103623660046112c3565b6107d4565b34801561037357600080fd5b506101e76103823660046113f8565b6107f9565b34801561039357600080fd5b506102096103a23660046112c3565b610831565b3480156103b357600080fd5b506101e76103c23660046112c3565b610877565b3480156103d357600080fd5b506103e76103e23660046112c3565b6108ea565b604051610215919061143a565b34801561040057600080fd5b5061025261040f366004611258565b610935565b34801561042057600080fd5b506101e761042f3660046114a6565b610974565b34801561044057600080fd5b506102527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561047457600080fd5b506102096104833660046113f8565b610b02565b34801561049457600080fd5b50610252600081565b3480156104a957600080fd5b506102527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104dd57600080fd5b506102526104ec366004611557565b610b2b565b3480156104fd57600080fd5b506102be61050c36600461167e565b63bc197c8160e01b95945050505050565b34801561052957600080fd5b506101e76105383660046112c3565b610b70565b34801561054957600080fd5b506102526105583660046112c3565b60009081526001602052604090205490565b34801561057657600080fd5b506101e76105853660046113f8565b610c1b565b6101e7610598366004611557565b610c40565b3480156105a957600080fd5b506102be6105b8366004611727565b63f23a6e6160e01b95945050505050565b3480156105d557600080fd5b50600254610252565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161060881610dc7565b6000610618898989898989610935565b90506106248184610dd4565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a604051610660969594939291906117b4565b60405180910390a383156106a957807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516106a091815260200190565b60405180910390a25b505050505050505050565b60006106bf82610e68565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106f1816000610b02565b6106ff576106ff8133610e8d565b600061070f888888888888610935565b905061071b8185610eca565b61072788888888610f18565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161075f94939291906117f1565b60405180910390a361077081610f90565b5050505050505050565b600060025b610788836108ea565b600381111561079957610799611424565b1492915050565b6000600361077f565b6000828152602081905260409020600101546107c481610dc7565b6107ce8383610fbc565b50505050565b6000806107e0836108ea565b60038111156107f1576107f1611424565b141592915050565b6001600160a01b03811633146108225760405163334bd91960e11b815260040160405180910390fd5b61082c828261104e565b505050565b60008061083d836108ea565b9050600181600381111561085357610853611424565b14806108705750600281600381111561086e5761086e611424565b145b9392505050565b333081146108a85760405163e2850c5960e01b81526001600160a01b03821660048201526024015b60405180910390fd5b60025460408051918252602082018490527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150600255565b6000818152600160205260408120548060000361090a5750600092915050565b6001810361091b5750600392915050565b4281111561092c5750600192915050565b50600292915050565b6000868686868686604051602001610952969594939291906117b4565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161099e81610dc7565b88871415806109ad5750888514155b156109df576040516001624fcdef60e01b03198152600481018a9052602481018690526044810188905260640161089f565b60006109f18b8b8b8b8b8b8b8b610b2b565b90506109fd8184610dd4565b60005b8a811015610ab35780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a3d57610a3d611823565b9050602002016020810190610a529190611839565b8d8d86818110610a6457610a64611823565b905060200201358c8c87818110610a7d57610a7d611823565b9050602002810190610a8f9190611854565b8c8b604051610aa3969594939291906117b4565b60405180910390a3600101610a00565b508315610af557807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610aec91815260200190565b60405180910390a25b5050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610b4c989796959493929190611930565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b9a81610dc7565b610ba382610831565b610bdf5781610bb260026110b9565b610bbc60016110b9565b604051635ead8eb560e01b8152600481019390935217602482015260440161089f565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610c3681610dc7565b6107ce838361104e565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c6c816000610b02565b610c7a57610c7a8133610e8d565b8786141580610c895750878414155b15610cbb576040516001624fcdef60e01b0319815260048101899052602481018590526044810187905260640161089f565b6000610ccd8a8a8a8a8a8a8a8a610b2b565b9050610cd98185610eca565b60005b89811015610db15760008b8b83818110610cf857610cf8611823565b9050602002016020810190610d0d9190611839565b905060008a8a84818110610d2357610d23611823565b9050602002013590503660008a8a86818110610d4157610d41611823565b9050602002810190610d539190611854565b91509150610d6384848484610f18565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d9a94939291906117f1565b60405180910390a350505050806001019050610cdc565b50610dbb81610f90565b50505050505050505050565b610dd18133610e8d565b50565b610ddd826107d4565b15610e0f5781610ded60006110b9565b604051635ead8eb560e01b81526004810192909252602482015260440161089f565b6000610e1a60025490565b905080821015610e4757604051635433660960e01b8152600481018390526024810182905260440161089f565b610e5182426119d1565b600093845260016020526040909320929092555050565b60006001600160e01b03198216630271189760e51b14806106bf57506106bf826110dc565b610e978282610b02565b610ec65760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161089f565b5050565b610ed38261077a565b610ee25781610ded60026110b9565b8015801590610ef75750610ef5816107a0565b155b15610ec65760405163121534c360e31b81526004810182905260240161089f565b600080856001600160a01b0316858585604051610f369291906119f2565b60006040518083038185875af1925050503d8060008114610f73576040519150601f19603f3d011682016040523d82523d6000602084013e610f78565b606091505b5091509150610f878282611111565b50505050505050565b610f998161077a565b610fa85780610ded60026110b9565b600090815260016020819052604090912055565b6000610fc88383610b02565b611046576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610ffe3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016106bf565b5060006106bf565b600061105a8383610b02565b15611046576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016106bf565b60008160038111156110cd576110cd611424565b600160ff919091161b92915050565b60006001600160e01b03198216637965db0b60e01b14806106bf57506301ffc9a760e01b6001600160e01b03198316146106bf565b606082611126576111218261112d565b6106bf565b50806106bf565b80511561113d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461116d57600080fd5b919050565b60008083601f84011261118457600080fd5b5081356001600160401b0381111561119b57600080fd5b6020830191508360208285010111156111b357600080fd5b9250929050565b600080600080600080600060c0888a0312156111d557600080fd5b6111de88611156565b96506020880135955060408801356001600160401b0381111561120057600080fd5b61120c8a828b01611172565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561124057600080fd5b81356001600160e01b03198116811461087057600080fd5b60008060008060008060a0878903121561127157600080fd5b61127a87611156565b95506020870135945060408701356001600160401b0381111561129c57600080fd5b6112a889828a01611172565b979a9699509760608101359660809091013595509350505050565b6000602082840312156112d557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561131a5761131a6112dc565b604052919050565b600082601f83011261133357600080fd5b81356001600160401b0381111561134c5761134c6112dc565b61135f601f8201601f19166020016112f2565b81815284602083860101111561137457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156113a757600080fd5b6113b085611156565b93506113be60208601611156565b92506040850135915060608501356001600160401b038111156113e057600080fd5b6113ec87828801611322565b91505092959194509250565b6000806040838503121561140b57600080fd5b8235915061141b60208401611156565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016004831061145c57634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f84011261147457600080fd5b5081356001600160401b0381111561148b57600080fd5b6020830191508360208260051b85010111156111b357600080fd5b600080600080600080600080600060c08a8c0312156114c457600080fd5b89356001600160401b03808211156114db57600080fd5b6114e78d838e01611462565b909b50995060208c013591508082111561150057600080fd5b61150c8d838e01611462565b909950975060408c013591508082111561152557600080fd5b506115328c828d01611462565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561157357600080fd5b88356001600160401b038082111561158a57600080fd5b6115968c838d01611462565b909a50985060208b01359150808211156115af57600080fd5b6115bb8c838d01611462565b909850965060408b01359150808211156115d457600080fd5b506115e18b828c01611462565b999c989b509699959896976060870135966080013595509350505050565b600082601f83011261161057600080fd5b813560206001600160401b0382111561162b5761162b6112dc565b8160051b61163a8282016112f2565b928352848101820192828101908785111561165457600080fd5b83870192505b848310156116735782358252918301919083019061165a565b979650505050505050565b600080600080600060a0868803121561169657600080fd5b61169f86611156565b94506116ad60208701611156565b935060408601356001600160401b03808211156116c957600080fd5b6116d589838a016115ff565b945060608801359150808211156116eb57600080fd5b6116f789838a016115ff565b9350608088013591508082111561170d57600080fd5b5061171a88828901611322565b9150509295509295909350565b600080600080600060a0868803121561173f57600080fd5b61174886611156565b945061175660208701611156565b9350604086013592506060860135915060808601356001600160401b0381111561177f57600080fd5b61171a88828901611322565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a0604082015260006117dc60a08301868861178b565b60608301949094525060800152949350505050565b60018060a01b038516815283602082015260606040820152600061181960608301848661178b565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184b57600080fd5b61087082611156565b6000808335601e1984360301811261186b57600080fd5b8301803591506001600160401b0382111561188557600080fd5b6020019150368190038213156111b357600080fd5b6000838385526020808601955060208560051b8301018460005b8781101561192357848303601f19018952813536889003601e190181126118da57600080fd5b870184810190356001600160401b038111156118f557600080fd5b80360382131561190457600080fd5b61190f85828461178b565b9a86019a94505050908301906001016118b4565b5090979650505050505050565b60a0808252810188905260008960c08301825b8b811015611971576001600160a01b0361195c84611156565b16825260209283019290910190600101611943565b5083810360208501528881526001600160fb1b0389111561199157600080fd5b8860051b9150818a602083013701828103602090810160408501526119b9908201878961189a565b60608401959095525050608001529695505050505050565b808201808211156106bf57634e487b7160e01b600052601160045260246000fd5b818382376000910190815291905056fea26469706673582212208b7d4906d8ae4a7bcf3f7e4af04af3a5811504f1ac624afa8e9ba6dbbcc6136464736f6c63430008180033a26469706673582212205911324004849c77445c3b2494cdf0d7b6b43f3d39e91829d2efd16f6c8e7de064736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} + } + \ No newline at end of file diff --git a/src/assets/abis/hb_wrapper.json b/src/assets/abis/hb_wrapper.json new file mode 100644 index 00000000..4ad8c43e --- /dev/null +++ b/src/assets/abis/hb_wrapper.json @@ -0,0 +1,255 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "WrapperContract", + "sourceName": "contracts/Factories.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_tokenFactory", + "type": "address" + }, + { + "internalType": "address", + "name": "_timelockFactory", + "type": "address" + }, + { + "internalType": "address", + "name": "_daoFactory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "dao", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "initialMembers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "initialAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "executionDelay", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "registry", + "type": "address" + }, + { + "indexed": false, + "internalType": "string[]", + "name": "keys", + "type": "string[]" + }, + { + "indexed": false, + "internalType": "string[]", + "name": "values", + "type": "string[]" + } + ], + "name": "NewDaoCreated", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "executionDelay", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "initialMembers", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "initialAmounts", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "keys", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "values", + "type": "string[]" + } + ], + "internalType": "struct WrapperContract.DaoParams", + "name": "params", + "type": "tuple" + } + ], + "name": "deployDAOwithToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "deployedDAOs", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "deployedRegistries", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "deployedTimelocks", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "deployedTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNumberOfDAOs", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161251f38038061251f83398101604081905261002f9161008d565b600080546001600160a01b039485166001600160a01b0319918216179091556001805493851693821693909317909255600280549190931691161790556100d0565b80516001600160a01b038116811461008857600080fd5b919050565b6000806000606084860312156100a257600080fd5b6100ab84610071565b92506100b960208501610071565b91506100c760408501610071565b90509250925092565b612440806100df6000396000f3fe6080604052600436106100555760003560e01c8063104af3e41461005a57806319e0b288146100975780631ecbdf63146100b75780634cfff150146100d7578063b7ec0122146100ec578063ec81aadb1461010a575b600080fd5b34801561006657600080fd5b5061007a6100753660046107ed565b61012a565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b5061007a6100b23660046107ed565b610154565b3480156100c357600080fd5b5061007a6100d23660046107ed565b610164565b6100ea6100e5366004610a90565b610174565b005b3480156100f857600080fd5b5060035460405190815260200161008e565b34801561011657600080fd5b5061007a6101253660046107ed565b610467565b6006818154811061013a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6003818154811061013a57600080fd5b6005818154811061013a57600080fd5b60a081015151610185906004610bf5565b8160c001515110156101f85760405162461bcd60e51b815260206004820152603260248201527f496e73756666696369656e742073657474696e6773206461746120696e20696e604482015271697469616c416d6f756e747320617272617960701b606482015260840160405180910390fd5b6000805482516020840151606085015160a086015160c0870151604051634adaab4b60e11b81526001600160a01b03909616956395b5569695610245959094909390929091600401610cd8565b6020604051808303816000875af1158015610264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102889190610d3a565b6001546080840151604051638c9513bb60e01b815230600482015260248101919091529192506000916001600160a01b0390911690638c9513bb906044016020604051808303816000875af11580156102e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103099190610d3a565b600254845160c086015160405163012c36e160e31b81529394506000936001600160a01b0390931692630961b7089261034a92889288929190600401610d5e565b6020604051808303816000875af1158015610369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038d9190610d3a565b90506000823060405161039f906107e0565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156103d2573d6000803e3d6000fd5b5090506103ec828585848960e001518a6101000151610477565b816001600160a01b03167f01c5013cf023a364cc49643b8f57347e398d2f0db0968edeb64e7c41bf2dfbde858760a001518860c0015189600001518a602001518b604001518c60800151898e60e001518f61010001516040516104589a99989796959493929190610e01565b60405180910390a25050505050565b6004818154811061013a57600080fd5b6003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03808a166001600160a01b0319928316179092556004805480850182557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180548a85169084168117909155600580548087019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548a86169085161790556006805495860181556000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909401805493881693909216929092179055604051633825b60160e11b815263704b6c029161059e918891016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156105b857600080fd5b505af11580156105cc573d6000803e3d6000fd5b505050506000849050806001600160a01b0316632f2ff15d826001600160a01b0316638f61f4f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106469190610ec1565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b038a166024820152604401600060405180830381600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b50505050806001600160a01b0316632f2ff15d826001600160a01b03166307bd02656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190610ec1565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b038a166024820152604401600060405180830381600087803b15801561075f57600080fd5b505af1158015610773573d6000803e3d6000fd5b505060405163223e3d0960e21b81526001600160a01b03871692506388f8f42491506107a59086908690600401610eda565b600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b5050505050505050505050565b61150280610f0983390190565b6000602082840312156107ff57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561084057610840610806565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561086f5761086f610806565b604052919050565b600082601f83011261088857600080fd5b813567ffffffffffffffff8111156108a2576108a2610806565b6108b5601f8201601f1916602001610846565b8181528460208386010111156108ca57600080fd5b816020850160208301376000918101602001919091529392505050565b803560ff811681146108f857600080fd5b919050565b600067ffffffffffffffff82111561091757610917610806565b5060051b60200190565b6001600160a01b038116811461093657600080fd5b50565b600082601f83011261094a57600080fd5b8135602061095f61095a836108fd565b610846565b8083825260208201915060208460051b87010193508684111561098157600080fd5b602086015b848110156109a657803561099981610921565b8352918301918301610986565b509695505050505050565b600082601f8301126109c257600080fd5b813560206109d261095a836108fd565b8083825260208201915060208460051b8701019350868411156109f457600080fd5b602086015b848110156109a657803583529183019183016109f9565b600082601f830112610a2157600080fd5b81356020610a3161095a836108fd565b82815260059290921b84018101918181019086841115610a5057600080fd5b8286015b848110156109a657803567ffffffffffffffff811115610a745760008081fd5b610a828986838b0101610877565b845250918301918301610a54565b600060208284031215610aa257600080fd5b813567ffffffffffffffff80821115610aba57600080fd5b908301906101208286031215610acf57600080fd5b610ad761081c565b823582811115610ae657600080fd5b610af287828601610877565b825250602083013582811115610b0757600080fd5b610b1387828601610877565b602083015250604083013582811115610b2b57600080fd5b610b3787828601610877565b604083015250610b49606084016108e7565b60608201526080830135608082015260a083013582811115610b6a57600080fd5b610b7687828601610939565b60a08301525060c083013582811115610b8e57600080fd5b610b9a878286016109b1565b60c08301525060e083013582811115610bb257600080fd5b610bbe87828601610a10565b60e0830152506101008084013583811115610bd857600080fd5b610be488828701610a10565b918301919091525095945050505050565b80820180821115610c1657634e487b7160e01b600052601160045260246000fd5b92915050565b6000815180845260005b81811015610c4257602081850181015186830182015201610c26565b506000602082860101526020601f19601f83011685010191505092915050565b60008151808452602080850194506020840160005b83811015610c9c5781516001600160a01b031687529582019590820190600101610c77565b509495945050505050565b60008151808452602080850194506020840160005b83811015610c9c57815187529582019590820190600101610cbc565b60a081526000610ceb60a0830188610c1c565b8281036020840152610cfd8188610c1c565b905060ff861660408401528281036060840152610d1a8186610c62565b90508281036080840152610d2e8185610ca7565b98975050505050505050565b600060208284031215610d4c57600080fd5b8151610d5781610921565b9392505050565b6001600160a01b03858116825284166020820152608060408201819052600090610d8a90830185610c1c565b8281036060840152610d9c8185610ca7565b979650505050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015610df457601f19868403018952610de2838351610c1c565b98840198925090830190600101610dc6565b5090979650505050505050565b6001600160a01b038b8116825261014060208301819052600091610e278483018e610c62565b91508382036040850152610e3b828d610ca7565b91508382036060850152610e4f828c610c1c565b91508382036080850152610e63828b610c1c565b915083820360a0850152610e77828a610c1c565b91508760c085015280871660e085015250828103610100840152610e9b8186610da7565b9050828103610120840152610eb08185610da7565b9d9c50505050505050505050505050565b600060208284031215610ed357600080fd5b5051919050565b604081526000610eed6040830185610da7565b8281036020840152610eff8185610da7565b9594505050505056fe608060405234801561001057600080fd5b506040516200150238038062001502833981016040819052610031916100dd565b60016000556001600160a01b0382166100905760405162461bcd60e51b815260206004820152601c60248201527f4f776e657220616464726573732063616e6e6f74206265207a65726f00000000604482015260640160405180910390fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055610110565b80516001600160a01b03811681146100d857600080fd5b919050565b600080604083850312156100f057600080fd5b6100f9836100c1565b9150610107602084016100c1565b90509250929050565b6113e280620001206000396000f3fe6080604052600436106100a05760003560e01c806388f8f4241161006457806388f8f424146101ae5780638da5cb5b146101ce578063981f5499146102065780639db5dbe414610228578063ac210cc714610248578063bc87eed31461026857600080fd5b8063150b7a02146100e15780631aca63761461011f5780632559ddf5146101415780632e9c247b146101615780637b1a49091461018e57600080fd5b366100dc5760405134815233907f4103257eaac983ca79a70d28f90dfc4fa16b619bb0c17ee7cab0d4034c2796249060200160405180910390a2005b600080fd5b3480156100ed57600080fd5b506101016100fc366004610ce7565b61027d565b6040516001600160e01b031990911681526020015b60405180910390f35b34801561012b57600080fd5b5061013f61013a366004610d86565b6102de565b005b34801561014d57600080fd5b5061013f61015c366004610e7e565b610420565b34801561016d57600080fd5b5061018161017c366004610ee2565b610568565b6040516101169190610f6f565b34801561019a57600080fd5b5061013f6101a9366004610f89565b610618565b3480156101ba57600080fd5b5061013f6101c9366004611054565b610766565b3480156101da57600080fd5b506003546101ee906001600160a01b031681565b6040516001600160a01b039091168152602001610116565b34801561021257600080fd5b5061021b6108c8565b60405161011691906110ae565b34801561023457600080fd5b5061013f610243366004610d86565b610a1a565b34801561025457600080fd5b506004546101ee906001600160a01b031681565b34801561027457600080fd5b5061021b610b55565b6000336001600160a01b0316856001600160a01b03167fa7623ac946123c8343a3277b72c66662dab5c4784cebe18bb73311b3d41882a7866040516102c491815260200190565b60405180910390a350630a85bd0160e11b95945050505050565b6003546001600160a01b031633146103115760405162461bcd60e51b815260040161030890611112565b60405180910390fd5b61031a83610c2e565b6103665760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e206973206e6f7420612076616c69642045524337323100000000006044820152606401610308565b604051632142170760e11b81523060048201526001600160a01b038381166024830152604482018390528416906342842e0e90606401600060405180830381600087803b1580156103b657600080fd5b505af11580156103ca573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167fc461d0f02e326879d642fc0b955c081fd7827836382a43e99fe5df550589b0118360405161041391815260200190565b60405180910390a3505050565b6003546001600160a01b031633148061044357506004546001600160a01b031633145b61048f5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79207468652044414f2063616e206564697420726567697374727900006044820152606401610308565b60018260405161049f9190611149565b908152602001604051809103902080546104b890611165565b90506000036104ff57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016104fd83826111e9565b505b806001836040516105109190611149565b9081526020016040518091039020908161052a91906111e9565b507f7b86c5d3c943fd36e157d1f4f62c14255da7cef7e527b7066f90325657091a0c828260405161055c9291906112a9565b60405180910390a15050565b606060018260405161057a9190611149565b9081526020016040518091039020805461059390611165565b80601f01602080910402602001604051908101604052809291908181526020018280546105bf90611165565b801561060c5780601f106105e15761010080835404028352916020019161060c565b820191906000526020600020905b8154815290600101906020018083116105ef57829003601f168201915b50505050509050919050565b6003546001600160a01b031633146106425760405162461bcd60e51b815260040161030890611112565b61064a610ca5565b804710156106915760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610308565b60405147906001600160a01b0384169083156108fc029084906000818181858888f193505050501580156106c9573d6000803e3d6000fd5b506106d482826112d7565b47146107145760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610308565b826001600160a01b03167fba7bb5aa419c34d8776b86cc0e9d41e72d74a893a511f361a11af6c05e920c3d8360405161074f91815260200190565b60405180910390a2506107626001600055565b5050565b6003546001600160a01b031633148061078957506004546001600160a01b031633145b6107d55760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79207468652044414f2063616e206564697420726567697374727900006044820152606401610308565b60005b82518110156108c35760008382815181106107f5576107f56112fe565b602002602001015190506000838381518110610813576108136112fe565b6020026020010151905060018260405161082d9190611149565b9081526020016040518091039020805461084690611165565b905060000361088d57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161088b83826111e9565b505b8060018360405161089e9190611149565b908152602001604051809103902090816108b891906111e9565b5050506001016107d8565b505050565b60025460609060009067ffffffffffffffff8111156108e9576108e9610dc7565b60405190808252806020026020018201604052801561091c57816020015b60608152602001906001900390816109075790505b50905060005b600254811015610a1457600160028281548110610941576109416112fe565b906000526020600020016040516109589190611314565b9081526020016040518091039020805461097190611165565b80601f016020809104026020016040519081016040528092919081815260200182805461099d90611165565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b5050505050828281518110610a0157610a016112fe565b6020908102919091010152600101610922565b50919050565b6003546001600160a01b03163314610a445760405162461bcd60e51b815260040161030890611112565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af1158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb919061138a565b905080610b025760405162461bcd60e51b8152602060048201526015602482015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610308565b826001600160a01b0316846001600160a01b03167f3ed03153e9c248019b0420ed4652ed13c51da0ec7ecc09eb2d3b70f2064be64b84604051610b4791815260200190565b60405180910390a350505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610c25578382906000526020600020018054610b9890611165565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc490611165565b8015610c115780601f10610be657610100808354040283529160200191610c11565b820191906000526020600020905b815481529060010190602001808311610bf457829003601f168201915b505050505081526020019060010190610b79565b50505050905090565b604051632142170760e11b815230600482018190526024820152600060448201819052906001600160a01b038316906342842e0e90606401600060405180830381600087803b158015610c8057600080fd5b505af1925050508015610c91575060015b610c9d57506000919050565b506001919050565b600260005403610cc857604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6001600160a01b0381168114610ce457600080fd5b50565b600080600080600060808688031215610cff57600080fd5b8535610d0a81610ccf565b94506020860135610d1a81610ccf565b935060408601359250606086013567ffffffffffffffff80821115610d3e57600080fd5b818801915088601f830112610d5257600080fd5b813581811115610d6157600080fd5b896020828501011115610d7357600080fd5b9699959850939650602001949392505050565b600080600060608486031215610d9b57600080fd5b8335610da681610ccf565b92506020840135610db681610ccf565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e0657610e06610dc7565b604052919050565b600082601f830112610e1f57600080fd5b813567ffffffffffffffff811115610e3957610e39610dc7565b610e4c601f8201601f1916602001610ddd565b818152846020838601011115610e6157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610e9157600080fd5b823567ffffffffffffffff80821115610ea957600080fd5b610eb586838701610e0e565b93506020850135915080821115610ecb57600080fd5b50610ed885828601610e0e565b9150509250929050565b600060208284031215610ef457600080fd5b813567ffffffffffffffff811115610f0b57600080fd5b610f1784828501610e0e565b949350505050565b60005b83811015610f3a578181015183820152602001610f22565b50506000910152565b60008151808452610f5b816020860160208601610f1f565b601f01601f19169290920160200192915050565b602081526000610f826020830184610f43565b9392505050565b60008060408385031215610f9c57600080fd5b8235610fa781610ccf565b946020939093013593505050565b600082601f830112610fc657600080fd5b8135602067ffffffffffffffff80831115610fe357610fe3610dc7565b8260051b610ff2838201610ddd565b938452858101830193838101908886111561100c57600080fd5b84880192505b858310156110485782358481111561102a5760008081fd5b6110388a87838c0101610e0e565b8352509184019190840190611012565b98975050505050505050565b6000806040838503121561106757600080fd5b823567ffffffffffffffff8082111561107f57600080fd5b61108b86838701610fb5565b935060208501359150808211156110a157600080fd5b50610ed885828601610fb5565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561110557603f198886030184526110f3858351610f43565b945092850192908501906001016110d7565b5092979650505050505050565b6020808252601f908201527f4f6e6c79207468652044414f2063616e206d616b65207472616e736665727300604082015260600190565b6000825161115b818460208701610f1f565b9190910192915050565b600181811c9082168061117957607f821691505b602082108103610a1457634e487b7160e01b600052602260045260246000fd5b601f8211156108c3576000816000526020600020601f850160051c810160208610156111c25750805b601f850160051c820191505b818110156111e1578281556001016111ce565b505050505050565b815167ffffffffffffffff81111561120357611203610dc7565b611217816112118454611165565b84611199565b602080601f83116001811461124c57600084156112345750858301515b600019600386901b1c1916600185901b1785556111e1565b600085815260208120601f198616915b8281101561127b5788860151825594840194600190910190840161125c565b50858210156112995787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006112bc6040830185610f43565b82810360208401526112ce8185610f43565b95945050505050565b818103818111156112f857634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052603260045260246000fd5b600080835461132281611165565b6001828116801561133a576001811461134f5761137e565b60ff198416875282151583028701945061137e565b8760005260208060002060005b858110156113755781548a82015290840190820161135c565b50505082870194505b50929695505050505050565b60006020828403121561139c57600080fd5b81518015158114610f8257600080fdfea2646970667358221220837b3ce23c3d441ddd2b50cc690305c50de34a5cbdb8f62ead0bb9423aeb64f664736f6c63430008180033a2646970667358221220289e93b874e060ab7744631a500caf935dcb9eb1222154b3cd8b4b5b0c8714d464736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100555760003560e01c8063104af3e41461005a57806319e0b288146100975780631ecbdf63146100b75780634cfff150146100d7578063b7ec0122146100ec578063ec81aadb1461010a575b600080fd5b34801561006657600080fd5b5061007a6100753660046107ed565b61012a565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b5061007a6100b23660046107ed565b610154565b3480156100c357600080fd5b5061007a6100d23660046107ed565b610164565b6100ea6100e5366004610a90565b610174565b005b3480156100f857600080fd5b5060035460405190815260200161008e565b34801561011657600080fd5b5061007a6101253660046107ed565b610467565b6006818154811061013a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6003818154811061013a57600080fd5b6005818154811061013a57600080fd5b60a081015151610185906004610bf5565b8160c001515110156101f85760405162461bcd60e51b815260206004820152603260248201527f496e73756666696369656e742073657474696e6773206461746120696e20696e604482015271697469616c416d6f756e747320617272617960701b606482015260840160405180910390fd5b6000805482516020840151606085015160a086015160c0870151604051634adaab4b60e11b81526001600160a01b03909616956395b5569695610245959094909390929091600401610cd8565b6020604051808303816000875af1158015610264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102889190610d3a565b6001546080840151604051638c9513bb60e01b815230600482015260248101919091529192506000916001600160a01b0390911690638c9513bb906044016020604051808303816000875af11580156102e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103099190610d3a565b600254845160c086015160405163012c36e160e31b81529394506000936001600160a01b0390931692630961b7089261034a92889288929190600401610d5e565b6020604051808303816000875af1158015610369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038d9190610d3a565b90506000823060405161039f906107e0565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156103d2573d6000803e3d6000fd5b5090506103ec828585848960e001518a6101000151610477565b816001600160a01b03167f01c5013cf023a364cc49643b8f57347e398d2f0db0968edeb64e7c41bf2dfbde858760a001518860c0015189600001518a602001518b604001518c60800151898e60e001518f61010001516040516104589a99989796959493929190610e01565b60405180910390a25050505050565b6004818154811061013a57600080fd5b6003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03808a166001600160a01b0319928316179092556004805480850182557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180548a85169084168117909155600580548087019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548a86169085161790556006805495860181556000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909401805493881693909216929092179055604051633825b60160e11b815263704b6c029161059e918891016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156105b857600080fd5b505af11580156105cc573d6000803e3d6000fd5b505050506000849050806001600160a01b0316632f2ff15d826001600160a01b0316638f61f4f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106469190610ec1565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b038a166024820152604401600060405180830381600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b50505050806001600160a01b0316632f2ff15d826001600160a01b03166307bd02656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190610ec1565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b038a166024820152604401600060405180830381600087803b15801561075f57600080fd5b505af1158015610773573d6000803e3d6000fd5b505060405163223e3d0960e21b81526001600160a01b03871692506388f8f42491506107a59086908690600401610eda565b600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b5050505050505050505050565b61150280610f0983390190565b6000602082840312156107ff57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561084057610840610806565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561086f5761086f610806565b604052919050565b600082601f83011261088857600080fd5b813567ffffffffffffffff8111156108a2576108a2610806565b6108b5601f8201601f1916602001610846565b8181528460208386010111156108ca57600080fd5b816020850160208301376000918101602001919091529392505050565b803560ff811681146108f857600080fd5b919050565b600067ffffffffffffffff82111561091757610917610806565b5060051b60200190565b6001600160a01b038116811461093657600080fd5b50565b600082601f83011261094a57600080fd5b8135602061095f61095a836108fd565b610846565b8083825260208201915060208460051b87010193508684111561098157600080fd5b602086015b848110156109a657803561099981610921565b8352918301918301610986565b509695505050505050565b600082601f8301126109c257600080fd5b813560206109d261095a836108fd565b8083825260208201915060208460051b8701019350868411156109f457600080fd5b602086015b848110156109a657803583529183019183016109f9565b600082601f830112610a2157600080fd5b81356020610a3161095a836108fd565b82815260059290921b84018101918181019086841115610a5057600080fd5b8286015b848110156109a657803567ffffffffffffffff811115610a745760008081fd5b610a828986838b0101610877565b845250918301918301610a54565b600060208284031215610aa257600080fd5b813567ffffffffffffffff80821115610aba57600080fd5b908301906101208286031215610acf57600080fd5b610ad761081c565b823582811115610ae657600080fd5b610af287828601610877565b825250602083013582811115610b0757600080fd5b610b1387828601610877565b602083015250604083013582811115610b2b57600080fd5b610b3787828601610877565b604083015250610b49606084016108e7565b60608201526080830135608082015260a083013582811115610b6a57600080fd5b610b7687828601610939565b60a08301525060c083013582811115610b8e57600080fd5b610b9a878286016109b1565b60c08301525060e083013582811115610bb257600080fd5b610bbe87828601610a10565b60e0830152506101008084013583811115610bd857600080fd5b610be488828701610a10565b918301919091525095945050505050565b80820180821115610c1657634e487b7160e01b600052601160045260246000fd5b92915050565b6000815180845260005b81811015610c4257602081850181015186830182015201610c26565b506000602082860101526020601f19601f83011685010191505092915050565b60008151808452602080850194506020840160005b83811015610c9c5781516001600160a01b031687529582019590820190600101610c77565b509495945050505050565b60008151808452602080850194506020840160005b83811015610c9c57815187529582019590820190600101610cbc565b60a081526000610ceb60a0830188610c1c565b8281036020840152610cfd8188610c1c565b905060ff861660408401528281036060840152610d1a8186610c62565b90508281036080840152610d2e8185610ca7565b98975050505050505050565b600060208284031215610d4c57600080fd5b8151610d5781610921565b9392505050565b6001600160a01b03858116825284166020820152608060408201819052600090610d8a90830185610c1c565b8281036060840152610d9c8185610ca7565b979650505050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015610df457601f19868403018952610de2838351610c1c565b98840198925090830190600101610dc6565b5090979650505050505050565b6001600160a01b038b8116825261014060208301819052600091610e278483018e610c62565b91508382036040850152610e3b828d610ca7565b91508382036060850152610e4f828c610c1c565b91508382036080850152610e63828b610c1c565b915083820360a0850152610e77828a610c1c565b91508760c085015280871660e085015250828103610100840152610e9b8186610da7565b9050828103610120840152610eb08185610da7565b9d9c50505050505050505050505050565b600060208284031215610ed357600080fd5b5051919050565b604081526000610eed6040830185610da7565b8281036020840152610eff8185610da7565b9594505050505056fe608060405234801561001057600080fd5b506040516200150238038062001502833981016040819052610031916100dd565b60016000556001600160a01b0382166100905760405162461bcd60e51b815260206004820152601c60248201527f4f776e657220616464726573732063616e6e6f74206265207a65726f00000000604482015260640160405180910390fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055610110565b80516001600160a01b03811681146100d857600080fd5b919050565b600080604083850312156100f057600080fd5b6100f9836100c1565b9150610107602084016100c1565b90509250929050565b6113e280620001206000396000f3fe6080604052600436106100a05760003560e01c806388f8f4241161006457806388f8f424146101ae5780638da5cb5b146101ce578063981f5499146102065780639db5dbe414610228578063ac210cc714610248578063bc87eed31461026857600080fd5b8063150b7a02146100e15780631aca63761461011f5780632559ddf5146101415780632e9c247b146101615780637b1a49091461018e57600080fd5b366100dc5760405134815233907f4103257eaac983ca79a70d28f90dfc4fa16b619bb0c17ee7cab0d4034c2796249060200160405180910390a2005b600080fd5b3480156100ed57600080fd5b506101016100fc366004610ce7565b61027d565b6040516001600160e01b031990911681526020015b60405180910390f35b34801561012b57600080fd5b5061013f61013a366004610d86565b6102de565b005b34801561014d57600080fd5b5061013f61015c366004610e7e565b610420565b34801561016d57600080fd5b5061018161017c366004610ee2565b610568565b6040516101169190610f6f565b34801561019a57600080fd5b5061013f6101a9366004610f89565b610618565b3480156101ba57600080fd5b5061013f6101c9366004611054565b610766565b3480156101da57600080fd5b506003546101ee906001600160a01b031681565b6040516001600160a01b039091168152602001610116565b34801561021257600080fd5b5061021b6108c8565b60405161011691906110ae565b34801561023457600080fd5b5061013f610243366004610d86565b610a1a565b34801561025457600080fd5b506004546101ee906001600160a01b031681565b34801561027457600080fd5b5061021b610b55565b6000336001600160a01b0316856001600160a01b03167fa7623ac946123c8343a3277b72c66662dab5c4784cebe18bb73311b3d41882a7866040516102c491815260200190565b60405180910390a350630a85bd0160e11b95945050505050565b6003546001600160a01b031633146103115760405162461bcd60e51b815260040161030890611112565b60405180910390fd5b61031a83610c2e565b6103665760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e206973206e6f7420612076616c69642045524337323100000000006044820152606401610308565b604051632142170760e11b81523060048201526001600160a01b038381166024830152604482018390528416906342842e0e90606401600060405180830381600087803b1580156103b657600080fd5b505af11580156103ca573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167fc461d0f02e326879d642fc0b955c081fd7827836382a43e99fe5df550589b0118360405161041391815260200190565b60405180910390a3505050565b6003546001600160a01b031633148061044357506004546001600160a01b031633145b61048f5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79207468652044414f2063616e206564697420726567697374727900006044820152606401610308565b60018260405161049f9190611149565b908152602001604051809103902080546104b890611165565b90506000036104ff57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016104fd83826111e9565b505b806001836040516105109190611149565b9081526020016040518091039020908161052a91906111e9565b507f7b86c5d3c943fd36e157d1f4f62c14255da7cef7e527b7066f90325657091a0c828260405161055c9291906112a9565b60405180910390a15050565b606060018260405161057a9190611149565b9081526020016040518091039020805461059390611165565b80601f01602080910402602001604051908101604052809291908181526020018280546105bf90611165565b801561060c5780601f106105e15761010080835404028352916020019161060c565b820191906000526020600020905b8154815290600101906020018083116105ef57829003601f168201915b50505050509050919050565b6003546001600160a01b031633146106425760405162461bcd60e51b815260040161030890611112565b61064a610ca5565b804710156106915760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610308565b60405147906001600160a01b0384169083156108fc029084906000818181858888f193505050501580156106c9573d6000803e3d6000fd5b506106d482826112d7565b47146107145760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610308565b826001600160a01b03167fba7bb5aa419c34d8776b86cc0e9d41e72d74a893a511f361a11af6c05e920c3d8360405161074f91815260200190565b60405180910390a2506107626001600055565b5050565b6003546001600160a01b031633148061078957506004546001600160a01b031633145b6107d55760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79207468652044414f2063616e206564697420726567697374727900006044820152606401610308565b60005b82518110156108c35760008382815181106107f5576107f56112fe565b602002602001015190506000838381518110610813576108136112fe565b6020026020010151905060018260405161082d9190611149565b9081526020016040518091039020805461084690611165565b905060000361088d57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161088b83826111e9565b505b8060018360405161089e9190611149565b908152602001604051809103902090816108b891906111e9565b5050506001016107d8565b505050565b60025460609060009067ffffffffffffffff8111156108e9576108e9610dc7565b60405190808252806020026020018201604052801561091c57816020015b60608152602001906001900390816109075790505b50905060005b600254811015610a1457600160028281548110610941576109416112fe565b906000526020600020016040516109589190611314565b9081526020016040518091039020805461097190611165565b80601f016020809104026020016040519081016040528092919081815260200182805461099d90611165565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b5050505050828281518110610a0157610a016112fe565b6020908102919091010152600101610922565b50919050565b6003546001600160a01b03163314610a445760405162461bcd60e51b815260040161030890611112565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af1158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb919061138a565b905080610b025760405162461bcd60e51b8152602060048201526015602482015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610308565b826001600160a01b0316846001600160a01b03167f3ed03153e9c248019b0420ed4652ed13c51da0ec7ecc09eb2d3b70f2064be64b84604051610b4791815260200190565b60405180910390a350505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610c25578382906000526020600020018054610b9890611165565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc490611165565b8015610c115780601f10610be657610100808354040283529160200191610c11565b820191906000526020600020905b815481529060010190602001808311610bf457829003601f168201915b505050505081526020019060010190610b79565b50505050905090565b604051632142170760e11b815230600482018190526024820152600060448201819052906001600160a01b038316906342842e0e90606401600060405180830381600087803b158015610c8057600080fd5b505af1925050508015610c91575060015b610c9d57506000919050565b506001919050565b600260005403610cc857604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6001600160a01b0381168114610ce457600080fd5b50565b600080600080600060808688031215610cff57600080fd5b8535610d0a81610ccf565b94506020860135610d1a81610ccf565b935060408601359250606086013567ffffffffffffffff80821115610d3e57600080fd5b818801915088601f830112610d5257600080fd5b813581811115610d6157600080fd5b896020828501011115610d7357600080fd5b9699959850939650602001949392505050565b600080600060608486031215610d9b57600080fd5b8335610da681610ccf565b92506020840135610db681610ccf565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e0657610e06610dc7565b604052919050565b600082601f830112610e1f57600080fd5b813567ffffffffffffffff811115610e3957610e39610dc7565b610e4c601f8201601f1916602001610ddd565b818152846020838601011115610e6157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610e9157600080fd5b823567ffffffffffffffff80821115610ea957600080fd5b610eb586838701610e0e565b93506020850135915080821115610ecb57600080fd5b50610ed885828601610e0e565b9150509250929050565b600060208284031215610ef457600080fd5b813567ffffffffffffffff811115610f0b57600080fd5b610f1784828501610e0e565b949350505050565b60005b83811015610f3a578181015183820152602001610f22565b50506000910152565b60008151808452610f5b816020860160208601610f1f565b601f01601f19169290920160200192915050565b602081526000610f826020830184610f43565b9392505050565b60008060408385031215610f9c57600080fd5b8235610fa781610ccf565b946020939093013593505050565b600082601f830112610fc657600080fd5b8135602067ffffffffffffffff80831115610fe357610fe3610dc7565b8260051b610ff2838201610ddd565b938452858101830193838101908886111561100c57600080fd5b84880192505b858310156110485782358481111561102a5760008081fd5b6110388a87838c0101610e0e565b8352509184019190840190611012565b98975050505050505050565b6000806040838503121561106757600080fd5b823567ffffffffffffffff8082111561107f57600080fd5b61108b86838701610fb5565b935060208501359150808211156110a157600080fd5b50610ed885828601610fb5565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561110557603f198886030184526110f3858351610f43565b945092850192908501906001016110d7565b5092979650505050505050565b6020808252601f908201527f4f6e6c79207468652044414f2063616e206d616b65207472616e736665727300604082015260600190565b6000825161115b818460208701610f1f565b9190910192915050565b600181811c9082168061117957607f821691505b602082108103610a1457634e487b7160e01b600052602260045260246000fd5b601f8211156108c3576000816000526020600020601f850160051c810160208610156111c25750805b601f850160051c820191505b818110156111e1578281556001016111ce565b505050505050565b815167ffffffffffffffff81111561120357611203610dc7565b611217816112118454611165565b84611199565b602080601f83116001811461124c57600084156112345750858301515b600019600386901b1c1916600185901b1785556111e1565b600085815260208120601f198616915b8281101561127b5788860151825594840194600190910190840161125c565b50858210156112995787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006112bc6040830185610f43565b82810360208401526112ce8185610f43565b95945050505050565b818103818111156112f857634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052603260045260246000fd5b600080835461132281611165565b6001828116801561133a576001811461134f5761137e565b60ff198416875282151583028701945061137e565b8760005260208060002060005b858110156113755781548a82015290840190820161135c565b50505082870194505b50929695505050505050565b60006020828403121561139c57600080fd5b81518015158114610f8257600080fdfea2646970667358221220837b3ce23c3d441ddd2b50cc690305c50de34a5cbdb8f62ead0bb9423aeb64f664736f6c63430008180033a2646970667358221220289e93b874e060ab7744631a500caf935dcb9eb1222154b3cd8b4b5b0c8714d464736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} + } + \ No newline at end of file diff --git a/src/modules/etherlink/components/EvmTreasuryTable.tsx b/src/modules/etherlink/components/EvmTreasuryTable.tsx index 30e33336..dde3b90d 100644 --- a/src/modules/etherlink/components/EvmTreasuryTable.tsx +++ b/src/modules/etherlink/components/EvmTreasuryTable.tsx @@ -10,8 +10,8 @@ import { useContext } from "react" import { EtherlinkContext } from "services/wagmi/context" export const EvmTreasuryTable = () => { - const { daoSelected } = useContext(EtherlinkContext) - console.log("daoSelected", daoSelected) + const { daoSelected, daoRegistryDetails } = useContext(EtherlinkContext) + console.log("daoSelected", daoRegistryDetails) return ( @@ -26,12 +26,12 @@ export const EvmTreasuryTable = () => { - Tezos + Etherink Testnet XTZ - 1000.00 + {daoRegistryDetails?.balance} - 0x1234...5678 + native token diff --git a/src/services/contracts/baseDAO/hooks/useOriginate.ts b/src/services/contracts/baseDAO/hooks/useOriginate.ts index 95823806..fe8042e6 100644 --- a/src/services/contracts/baseDAO/hooks/useOriginate.ts +++ b/src/services/contracts/baseDAO/hooks/useOriginate.ts @@ -14,10 +14,6 @@ import { getSignature } from "services/lite/utils" import { saveLiteCommunity } from "services/services/lite/lite-services" import { Community } from "models/Community" import { EnvKey, getEnv } from "services/config" -import HomebaseDaoEvm from "assets/abis/hb_dao.json" - -const ERC20_ABI = HomebaseDaoEvm.output.abi -const ERC20_BYTECODE = HomebaseDaoEvm.output.bytecode const INITIAL_STATES = [ { diff --git a/src/services/contracts/etherlinkDAO/hooks/temp-config.ts b/src/services/contracts/etherlinkDAO/hooks/temp-config.ts new file mode 100644 index 00000000..e78cc5f1 --- /dev/null +++ b/src/services/contracts/etherlinkDAO/hooks/temp-config.ts @@ -0,0 +1,1875 @@ +export const DAO_BYTECODE = + "610180604052348015610010575f80fd5b5060405161819f38038061819f83398181016040528101906100329190610c83565b806004836078610e1060016040518060400160405280600a81526020017f4d79476f7665726e6f7200000000000000000000000000000000000000000000815250806100826101c960201b60201c565b6100955f8361020660201b90919060201c565b61012081815250506100b160018261020660201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506100ee61025360201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050806003908161013a9190610efb565b505061014b836102ad60201b60201c565b61015a8261032060201b60201c565b610169816103d960201b60201c565b5050508073ffffffffffffffffffffffffffffffffffffffff166101608173ffffffffffffffffffffffffffffffffffffffff1681525050506101b18161041e60201b60201c565b506101c1816104f860201b60201c565b505050611459565b60606040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250905090565b5f602083511015610227576102208361059560201b60201c565b905061024d565b82610237836105fa60201b60201c565b5f0190816102459190610efb565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610292959493929190611000565b60405160208183030381529060405280519060200120905090565b7fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a9360085f9054906101000a900465ffffffffffff16826040516102f1929190611092565b60405180910390a18060085f6101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b5f8163ffffffff160361036a575f6040517ff1cfbf0500000000000000000000000000000000000000000000000000000000815260040161036191906110f2565b60405180910390fd5b7f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828600860069054906101000a900463ffffffff16826040516103ad92919061114a565b60405180910390a180600860066101000a81548163ffffffff021916908363ffffffff16021790555050565b7fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc054616007548260405161040c929190611171565b60405180910390a18060078190555050565b5f61042d61060360201b60201c565b9050808211156104765781816040517f243e544500000000000000000000000000000000000000000000000000000000815260040161046d929190611171565b60405180910390fd5b5f61048561060b60201b60201c565b90506104b861049861063d60201b60201c565b6104a7856106d460201b60201c565b600a61074160201b9092919060201c565b50507f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b463399781846040516104eb929190611171565b60405180910390a1505050565b7f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161054a929190611198565b60405180910390a180600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80829050601f815111156105e157826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016105d89190611225565b60405180910390fd5b8051816105ed90611272565b5f1c175f1b915050919050565b5f819050919050565b5f6064905090565b5f61061c600a61076260201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b5f61064c6107ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106b357506040513d601f19601f820116820180604052508101906106b09190611302565b60015b6106cc576106c56107d460201b60201c565b90506106d1565b809150505b90565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156107395760d0826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401610730929190611372565b60405180910390fd5b819050919050565b5f80610756855f0185856107e960201b60201c565b91509150935093915050565b5f80825f018054905090505f81146107c057610792835f0160018361078791906113c6565b610b5d60201b60201c565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166107c2565b5f5b915050919050565b5f61016051905090565b5f6107e443610b6f60201b60201c565b905090565b5f805f858054905090505f811115610a75575f6108188760018461080d91906113c6565b610b5d60201b60201c565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115610903576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff160361098b578461093a8860018561092f91906113c6565b610b5d60201b60201c565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550610a64565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050610b55565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b5f825f528160205f2001905092915050565b5f65ffffffffffff8016821115610bc0576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401610bb7929190611432565b60405180910390fd5b819050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bf582610bcc565b9050919050565b5f610c0682610beb565b9050919050565b610c1681610bfc565b8114610c20575f80fd5b50565b5f81519050610c3181610c0d565b92915050565b5f610c4182610bcc565b9050919050565b5f610c5282610c37565b9050919050565b610c6281610c48565b8114610c6c575f80fd5b50565b5f81519050610c7d81610c59565b92915050565b5f8060408385031215610c9957610c98610bc8565b5b5f610ca685828601610c23565b9250506020610cb785828601610c6f565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d3c57607f821691505b602082108103610d4f57610d4e610cf8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610db17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610d76565b610dbb8683610d76565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610dff610dfa610df584610dd3565b610ddc565b610dd3565b9050919050565b5f819050919050565b610e1883610de5565b610e2c610e2482610e06565b848454610d82565b825550505050565b5f90565b610e40610e34565b610e4b818484610e0f565b505050565b5b81811015610e6e57610e635f82610e38565b600181019050610e51565b5050565b601f821115610eb357610e8481610d55565b610e8d84610d67565b81016020851015610e9c578190505b610eb0610ea885610d67565b830182610e50565b50505b505050565b5f82821c905092915050565b5f610ed35f1984600802610eb8565b1980831691505092915050565b5f610eeb8383610ec4565b9150826002028217905092915050565b610f0482610cc1565b67ffffffffffffffff811115610f1d57610f1c610ccb565b5b610f278254610d25565b610f32828285610e72565b5f60209050601f831160018114610f63575f8415610f51578287015190505b610f5b8582610ee0565b865550610fc2565b601f198416610f7186610d55565b5f5b82811015610f9857848901518255600182019150602085019450602081019050610f73565b86831015610fb55784890151610fb1601f891682610ec4565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b610fdc81610fca565b82525050565b610feb81610dd3565b82525050565b610ffa81610beb565b82525050565b5f60a0820190506110135f830188610fd3565b6110206020830187610fd3565b61102d6040830186610fd3565b61103a6060830185610fe2565b6110476080830184610ff1565b9695505050505050565b5f65ffffffffffff82169050919050565b5f61107c61107761107284611051565b610ddc565b610dd3565b9050919050565b61108c81611062565b82525050565b5f6040820190506110a55f830185611083565b6110b26020830184611083565b9392505050565b5f819050919050565b5f6110dc6110d76110d2846110b9565b610ddc565b610dd3565b9050919050565b6110ec816110c2565b82525050565b5f6020820190506111055f8301846110e3565b92915050565b5f63ffffffff82169050919050565b5f61113461112f61112a8461110b565b610ddc565b610dd3565b9050919050565b6111448161111a565b82525050565b5f60408201905061115d5f83018561113b565b61116a602083018461113b565b9392505050565b5f6040820190506111845f830185610fe2565b6111916020830184610fe2565b9392505050565b5f6040820190506111ab5f830185610ff1565b6111b86020830184610ff1565b9392505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6111f782610cc1565b61120181856111bf565b93506112118185602086016111cf565b61121a816111dd565b840191505092915050565b5f6020820190508181035f83015261123d81846111ed565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f6112698251610fca565b80915050919050565b5f61127c82611245565b826112868461124f565b90506112918161125e565b925060208210156112d1576112cc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610d76565b831692505b5050919050565b6112e181611051565b81146112eb575f80fd5b50565b5f815190506112fc816112d8565b92915050565b5f6020828403121561131757611316610bc8565b5b5f611324848285016112ee565b91505092915050565b5f819050919050565b5f60ff82169050919050565b5f61135c6113576113528461132d565b610ddc565b611336565b9050919050565b61136c81611342565b82525050565b5f6040820190506113855f830185611363565b6113926020830184610fe2565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6113d082610dd3565b91506113db83610dd3565b92508282039050818111156113f3576113f2611399565b5b92915050565b5f819050919050565b5f61141c611417611412846113f9565b610ddc565b611336565b9050919050565b61142c81611402565b82525050565b5f6040820190506114455f830185611423565b6114526020830184610fe2565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051616ceb6114b45f395f611edc01525f612df701525f612dbc01525f61455601525f61453501525f61388d01525f6138e301525f61390c0152616ceb5ff3fe608060405260043610610296575f3560e01c80637ecebe0011610159578063c01f9e37116100c0578063e540d01d11610079578063e540d01d14610b89578063eb9019d414610bb1578063ece40cc114610bed578063f23a6e6114610c15578063f8ce560a14610c51578063fc0c546a14610c8d57610309565b8063c01f9e3714610a77578063c28bc2fa14610ab3578063c59057e414610acf578063d33219b414610b0b578063dd4e2ba514610b35578063deaaa7cc14610b5f57610309565b8063a7713a7011610112578063a7713a7014610947578063a890c91014610971578063a9a9529414610999578063ab58fb8e146109d5578063b58131b014610a11578063bc197c8114610a3b57610309565b80637ecebe001461080f57806384b0196e1461084b5780638ff262e31461087b57806391ddadf4146108b757806397c3d334146108e15780639a802a6d1461090b57610309565b806343859632116101fd5780635b8d0e0d116101b65780635b8d0e0d146106bb5780635f398a14146106f757806360c4247f14610733578063790518871461076f5780637b3c71d3146107975780637d5e81e2146107d357610309565b80634385963214610575578063452115d6146105b15780634bf5d7e9146105ed578063544ffc9c1461061757806354fd4d5014610655578063567813881461067f57610309565b8063160cbed71161024f578063160cbed71461043d5780632656227d146104795780632d63f693146104a95780632fe3e261146104e55780633932abb11461050f5780633e4f49e61461053957610309565b806301ffc9a71461030d57806302a251a31461034957806306f3f9e61461037357806306fdde031461039b578063143489d0146103c5578063150b7a021461040157610309565b36610309573073ffffffffffffffffffffffffffffffffffffffff166102ba610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614610307576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b5f80fd5b348015610318575f80fd5b50610333600480360381019061032e91906148c7565b610cc5565b604051610340919061490c565b60405180910390f35b348015610354575f80fd5b5061035d610da6565b60405161036a919061493d565b60405180910390f35b34801561037e575f80fd5b5061039960048036038101906103949190614980565b610db4565b005b3480156103a6575f80fd5b506103af610dc8565b6040516103bc9190614a1b565b60405180910390f35b3480156103d0575f80fd5b506103eb60048036038101906103e69190614980565b610e58565b6040516103f89190614a7a565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190614be9565b610e93565b6040516104349190614c78565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e9190614f26565b610f12565b604051610470919061493d565b60405180910390f35b610493600480360381019061048e9190614f26565b611008565b6040516104a0919061493d565b60405180910390f35b3480156104b4575f80fd5b506104cf60048036038101906104ca9190614980565b6111e2565b6040516104dc919061493d565b60405180910390f35b3480156104f0575f80fd5b506104f9611218565b6040516105069190614fed565b60405180910390f35b34801561051a575f80fd5b5061052361123c565b604051610530919061493d565b60405180910390f35b348015610544575f80fd5b5061055f600480360381019061055a9190614980565b61124a565b60405161056c9190615079565b60405180910390f35b348015610580575f80fd5b5061059b60048036038101906105969190615092565b61125b565b6040516105a8919061490c565b60405180910390f35b3480156105bc575f80fd5b506105d760048036038101906105d29190614f26565b6112c0565b6040516105e4919061493d565b60405180910390f35b3480156105f8575f80fd5b50610601611380565b60405161060e9190614a1b565b60405180910390f35b348015610622575f80fd5b5061063d60048036038101906106389190614980565b61143d565b60405161064c939291906150d0565b60405180910390f35b348015610660575f80fd5b50610669611470565b6040516106769190614a1b565b60405180910390f35b34801561068a575f80fd5b506106a560048036038101906106a0919061513b565b6114ad565b6040516106b2919061493d565b60405180910390f35b3480156106c6575f80fd5b506106e160048036038101906106dc91906151d2565b6114dc565b6040516106ee919061493d565b60405180910390f35b348015610702575f80fd5b5061071d600480360381019061071891906152b4565b61160b565b60405161072a919061493d565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190614980565b611673565b604051610766919061493d565b60405180910390f35b34801561077a575f80fd5b506107956004803603810190610790919061538f565b61176c565b005b3480156107a2575f80fd5b506107bd60048036038101906107b891906153ba565b611780565b6040516107ca919061493d565b60405180910390f35b3480156107de575f80fd5b506107f960048036038101906107f491906154c9565b6117e6565b604051610806919061493d565b60405180910390f35b34801561081a575f80fd5b506108356004803603810190610830919061559d565b6118d3565b604051610842919061493d565b60405180910390f35b348015610856575f80fd5b5061085f611919565b60405161087297969594939291906156b9565b60405180910390f35b348015610886575f80fd5b506108a1600480360381019061089c919061573b565b6119be565b6040516108ae919061493d565b60405180910390f35b3480156108c2575f80fd5b506108cb611a92565b6040516108d891906157ca565b60405180910390f35b3480156108ec575f80fd5b506108f5611b1d565b604051610902919061493d565b60405180910390f35b348015610916575f80fd5b50610931600480360381019061092c91906157e3565b611b25565b60405161093e919061493d565b60405180910390f35b348015610952575f80fd5b5061095b611b3a565b604051610968919061493d565b60405180910390f35b34801561097c575f80fd5b506109976004803603810190610992919061589b565b611b66565b005b3480156109a4575f80fd5b506109bf60048036038101906109ba9190614980565b611b7a565b6040516109cc919061490c565b60405180910390f35b3480156109e0575f80fd5b506109fb60048036038101906109f69190614980565b611b8b565b604051610a08919061493d565b60405180910390f35b348015610a1c575f80fd5b50610a25611bc1565b604051610a32919061493d565b60405180910390f35b348015610a46575f80fd5b50610a616004803603810190610a5c91906158c6565b611bcf565b604051610a6e9190614c78565b60405180910390f35b348015610a82575f80fd5b50610a9d6004803603810190610a989190614980565b611c4f565b604051610aaa919061493d565b60405180910390f35b610acd6004803603810190610ac891906159e6565b611cb9565b005b348015610ada575f80fd5b50610af56004803603810190610af09190614f26565b611d42565b604051610b02919061493d565b60405180910390f35b348015610b16575f80fd5b50610b1f611d7c565b604051610b2c9190614a7a565b60405180910390f35b348015610b40575f80fd5b50610b49611da4565b604051610b569190614a1b565b60405180910390f35b348015610b6a575f80fd5b50610b73611de1565b604051610b809190614fed565b60405180910390f35b348015610b94575f80fd5b50610baf6004803603810190610baa9190615a90565b611e05565b005b348015610bbc575f80fd5b50610bd76004803603810190610bd29190615abb565b611e19565b604051610be4919061493d565b60405180910390f35b348015610bf8575f80fd5b50610c136004803603810190610c0e9190614980565b611e34565b005b348015610c20575f80fd5b50610c3b6004803603810190610c369190615af9565b611e48565b604051610c489190614c78565b60405180910390f35b348015610c5c575f80fd5b50610c776004803603810190610c729190614980565b611ec8565b604051610c84919061493d565b60405180910390f35b348015610c98575f80fd5b50610ca1611ed9565b604051610cae9190615be7565b60405180910390f35b5f610cc0611f00565b905090565b5f7f65455a86000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d8f57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d9f5750610d9e82611f28565b5b9050919050565b5f610daf611f91565b905090565b610dbc611fb0565b610dc5816120a5565b50565b606060038054610dd790615c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390615c2d565b8015610e4e5780601f10610e2557610100808354040283529160200191610e4e565b820191905f5260205f20905b815481529060010190602001808311610e3157829003601f168201915b5050505050905090565b5f60045f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f3073ffffffffffffffffffffffffffffffffffffffff16610eb3610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63150b7a0260e01b9050949350505050565b5f80610f2086868686611d42565b9050610f3581610f306004612167565b61218b565b505f610f4482888888886121f6565b90505f8165ffffffffffff1614610fc9578060045f8481526020019081526020015f206001015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928282604051610fbc929190615c8d565b60405180910390a1610ffb565b6040517f90884a4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8192505050949350505050565b5f8061101686868686611d42565b9050611036816110266005612167565b6110306004612167565b1761218b565b50600160045f8381526020019081526020015f205f01601e6101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff16611082610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614611138575f5b8651811015611136573073ffffffffffffffffffffffffffffffffffffffff168782815181106110d2576110d1615cb4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361112b5761112a85828151811061110b5761110a615cb4565b5b602002602001015180519060200120600561220f90919063ffffffff16565b5b80600101905061109f565b505b611145818787878761232e565b3073ffffffffffffffffffffffffffffffffffffffff16611164610cb7565b73ffffffffffffffffffffffffffffffffffffffff161415801561118f575061118d6005612342565b155b1561119f5761119e60056123ae565b5b7f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f816040516111ce919061493d565b60405180910390a180915050949350505050565b5f60045f8381526020019081526020015f205f0160149054906101000a900465ffffffffffff1665ffffffffffff169050919050565b7f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a81181565b5f611245612424565b905090565b5f61125482612446565b9050919050565b5f60095f8481526020019081526020015f206003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f806112ce86868686611d42565b90506112e2816112dd5f612167565b61218b565b506112ec81610e58565b73ffffffffffffffffffffffffffffffffffffffff1661130a6125fb565b73ffffffffffffffffffffffffffffffffffffffff16146113695761132d6125fb565b6040517f233d98e30000000000000000000000000000000000000000000000000000000081526004016113609190614a7a565b60405180910390fd5b61137586868686612602565b915050949350505050565b606061138a611ed9565b73ffffffffffffffffffffffffffffffffffffffff16634bf5d7e96040518163ffffffff1660e01b81526004015f60405180830381865afa9250505080156113f457506040513d5f823e3d601f19601f820116820180604052508101906113f19190615d4f565b60015b611435576040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905061143a565b809150505b90565b5f805f8060095f8681526020019081526020015f209050805f015481600101548260020154935093509350509193909250565b60606040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250905090565b5f806114b76125fb565b90506114d384828560405180602001604052805f815250612619565b91505092915050565b5f80611569876115637f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a8118c8c8c6115128e612638565b8d8d604051611522929190615dc4565b60405180910390208c805190602001206040516020016115489796959493929190615deb565b6040516020818303038152906040528051906020012061268b565b856126a4565b9050806115ad57866040517f94ab6c070000000000000000000000000000000000000000000000000000000081526004016115a49190614a7a565b60405180910390fd5b6115fd89888a89898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505088612731565b915050979650505050505050565b5f806116156125fb565b905061166787828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505087612731565b91505095945050505050565b5f80600a5f018054905090505f600a5f016001836116919190615e85565b815481106116a2576116a1615cb4565b5b905f5260205f200190505f815f015f9054906101000a900465ffffffffffff1690505f825f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff169050858265ffffffffffff1611611728578079ffffffffffffffffffffffffffffffffffffffffffffffffffff16945050505050611767565b6117446117348761282e565b600a61288790919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169450505050505b919050565b611774611fb0565b61177d81612974565b50565b5f8061178a6125fb565b90506117db86828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050612619565b915050949350505050565b5f806117f06125fb565b90506117fc81846129e7565b61183d57806040517fd9b395570000000000000000000000000000000000000000000000000000000081526004016118349190614a7a565b60405180910390fd5b5f61186382600161184c611a92565b6118569190615eb8565b65ffffffffffff16611e19565b90505f61186e611bc1565b9050808210156118b9578282826040517fc242ee160000000000000000000000000000000000000000000000000000000081526004016118b093929190615ef1565b60405180910390fd5b6118c68888888887612b2f565b9350505050949350505050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6060805f805f606061192a612db4565b611932612dee565b46305f801b5f67ffffffffffffffff81111561195157611950614ac5565b5b60405190808252806020026020018201604052801561197f5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f80611a2984611a237ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d78989896119f48b612638565b604051602001611a08959493929190615f26565b6040516020818303038152906040528051906020012061268b565b856126a4565b905080611a6d57836040517f94ab6c07000000000000000000000000000000000000000000000000000000008152600401611a649190614a7a565b60405180910390fd5b611a8786858760405180602001604052805f815250612619565b915050949350505050565b5f611a9b611ed9565b73ffffffffffffffffffffffffffffffffffffffff166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b0257506040513d601f19601f82011682018060405250810190611aff9190615f8b565b60015b611b1557611b0e612e29565b9050611b1a565b809150505b90565b5f6064905090565b5f611b31848484612e38565b90509392505050565b5f611b45600a612ec3565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b611b6e611fb0565b611b7781612f25565b50565b5f611b8482612fc2565b9050919050565b5f60045f8381526020019081526020015f206001015f9054906101000a900465ffffffffffff1665ffffffffffff169050919050565b5f611bca612fcc565b905090565b5f3073ffffffffffffffffffffffffffffffffffffffff16611bef610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63bc197c8160e01b905095945050505050565b5f60045f8381526020019081526020015f205f01601a9054906101000a900463ffffffff1663ffffffff1660045f8481526020019081526020015f205f0160149054906101000a900465ffffffffffff16611caa9190615fb6565b65ffffffffffff169050919050565b611cc1611fb0565b5f808573ffffffffffffffffffffffffffffffffffffffff16858585604051611ceb929190615dc4565b5f6040518083038185875af1925050503d805f8114611d25576040519150601f19603f3d011682016040523d82523d5f602084013e611d2a565b606091505b5091509150611d398282612fd5565b50505050505050565b5f84848484604051602001611d5a94939291906161b3565b604051602081830303815290604052805190602001205f1c9050949350505050565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280602081526020017f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e815250905090565b7ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d781565b611e0d611fb0565b611e1681612ff9565b50565b5f611e2c8383611e276130b2565b612e38565b905092915050565b611e3c611fb0565b611e45816130c8565b50565b5f3073ffffffffffffffffffffffffffffffffffffffff16611e68610cb7565b73ffffffffffffffffffffffffffffffffffffffff1614611eb5576040517fe90a651e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63f23a6e6160e01b905095945050505050565b5f611ed28261310d565b9050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f600860069054906101000a900463ffffffff1663ffffffff16905090565b611fb86125fb565b73ffffffffffffffffffffffffffffffffffffffff16611fd6610cb7565b73ffffffffffffffffffffffffffffffffffffffff161461203557611ff96125fb565b6040517f47096e4700000000000000000000000000000000000000000000000000000000815260040161202c9190614a7a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16612054610cb7565b73ffffffffffffffffffffffffffffffffffffffff16146120a3575f6120786131b9565b604051612086929190615dc4565b604051809103902090505b8061209c60056131c5565b0361209157505b565b5f6120ae611b1d565b9050808211156120f75781816040517f243e54450000000000000000000000000000000000000000000000000000000081526004016120ee92919061620b565b60405180910390fd5b5f612100611b3a565b905061212761210d611a92565b6121168561331a565b600a6133879092919063ffffffff16565b50507f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997818460405161215a92919061620b565b60405180910390a1505050565b5f81600781111561217b5761217a615006565b5b60ff166001901b5f1b9050919050565b5f806121968461124a565b90505f801b836121a583612167565b16036121ec578381846040517f31b75e4d0000000000000000000000000000000000000000000000000000000081526004016121e393929190616232565b60405180910390fd5b8091505092915050565b5f61220486868686866133a2565b905095945050505050565b5f825f0160109054906101000a90046fffffffffffffffffffffffffffffffff169050825f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16600182016fffffffffffffffffffffffffffffffff16036122b0576040517f8acb5f2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81836001015f836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060018101835f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b61233b85858585856135a8565b5050505050565b5f815f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16149050919050565b5f815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505f815f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050565b5f60085f9054906101000a900465ffffffffffff1665ffffffffffff16905090565b5f806124518361365c565b90506005600781111561246757612466615006565b5b81600781111561247a57612479615006565b5b1461248857809150506125f6565b5f600c5f8581526020019081526020015f20549050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663584b153e826040518263ffffffff1660e01b81526004016124f79190614fed565b602060405180830381865afa158015612512573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125369190616291565b15612546576005925050506125f6565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ab0f529826040518263ffffffff1660e01b81526004016125a09190614fed565b602060405180830381865afa1580156125bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125df9190616291565b156125ef576007925050506125f6565b6002925050505b919050565b5f33905090565b5f61260f858585856137b3565b9050949350505050565b5f61262e858585856126296130b2565b612731565b9050949350505050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f61269d61269761388a565b83613940565b9050919050565b5f805f6126b18585613980565b50915091505f60038111156126c9576126c8615006565b5b8160038111156126dc576126db615006565b5b14801561271457508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061272657506127258686866139d5565b5b925050509392505050565b5f612745866127406001612167565b61218b565b505f61275a86612754896111e2565b85612e38565b90506127698787878487613af4565b5f8351036127ca578573ffffffffffffffffffffffffffffffffffffffff167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516127bd94939291906162bc565b60405180910390a2612821565b8573ffffffffffffffffffffffffffffffffffffffff167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb8712888784888860405161281895949392919061634e565b60405180910390a25b8091505095945050505050565b5f65ffffffffffff801682111561287f576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016128769291906163e6565b60405180910390fd5b819050919050565b5f80835f018054905090505f808290506005831115612908575f6128aa84613ce3565b846128b59190615e85565b90506128c3875f0182613dd9565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156128f657809150612906565b600181612903919061640d565b92505b505b5f612917875f01878585613deb565b90505f811461296657612938875f016001836129339190615e85565b613dd9565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612968565b5f5b94505050505092915050565b7fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a9360085f9054906101000a900465ffffffffffff16826040516129b8929190616440565b60405180910390a18060085f6101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b5f80825190506034811015612a00576001915050612b29565b5f6014820384015190507f2370726f706f7365723d3078000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff191614612a6a57600192505050612b29565b5f80602884612a799190615e85565b90505b83811015612af3575f80612aac888481518110612a9c57612a9b615cb4565b5b602001015160f81c60f81b613e60565b9150915081612ac45760019650505050505050612b29565b8060ff1660048573ffffffffffffffffffffffffffffffffffffffff16901b1793505050806001019050612a7c565b508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161493505050505b92915050565b5f612b438686868680519060200120611d42565b905084518651141580612b5857508351865114155b80612b6357505f8651145b15612bac578551845186516040517f447b05d0000000000000000000000000000000000000000000000000000000008152600401612ba3939291906150d0565b60405180910390fd5b5f60045f8381526020019081526020015f205f0160149054906101000a900465ffffffffffff1665ffffffffffff1614612c2b5780612bea8261124a565b5f801b6040517f31b75e4d000000000000000000000000000000000000000000000000000000008152600401612c2293929190616232565b60405180910390fd5b5f612c3461123c565b612c3c611a92565b65ffffffffffff16612c4e919061640d565b90505f612c59610da6565b90505f60045f8581526020019081526020015f20905084815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612cb98361282e565b815f0160146101000a81548165ffffffffffff021916908365ffffffffffff160217905550612ce782613ef7565b815f01601a6101000a81548163ffffffff021916908363ffffffff1602179055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084868b8b8d5167ffffffffffffffff811115612d4857612d47614ac5565b5b604051908082528060200260200182016040528015612d7b57816020015b6060815260200190600190039081612d665790505b508c89898b612d8a919061640d565b8e604051612da09998979695949392919061656a565b60405180910390a150505095945050505050565b6060612de95f7f0000000000000000000000000000000000000000000000000000000000000000613f4e90919063ffffffff16565b905090565b6060612e2460017f0000000000000000000000000000000000000000000000000000000000000000613f4e90919063ffffffff16565b905090565b5f612e334361282e565b905090565b5f612e41611ed9565b73ffffffffffffffffffffffffffffffffffffffff16633a46b1a885856040518363ffffffff1660e01b8152600401612e7b929190616618565b602060405180830381865afa158015612e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eba9190616653565b90509392505050565b5f80825f018054905090505f8114612f1b57612eed835f01600183612ee89190615e85565b613dd9565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612f1d565b5f5b915050919050565b7f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051612f7792919061667e565b60405180910390a180600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60019050919050565b5f600754905090565b606082612fea57612fe582613ffb565b612ff2565b819050612ff3565b5b92915050565b5f8163ffffffff1603613043575f6040517ff1cfbf0500000000000000000000000000000000000000000000000000000000815260040161303a91906166de565b60405180910390fd5b7f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828600860069054906101000a900463ffffffff1682604051613086929190616727565b60405180910390a180600860066101000a81548163ffffffff021916908363ffffffff16021790555050565b606060405180602001604052805f815250905090565b7fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461600754826040516130fb92919061620b565b60405180910390a18060078190555050565b5f613116611b1d565b61311f83611673565b613127611ed9565b73ffffffffffffffffffffffffffffffffffffffff16638e539e8c856040518263ffffffff1660e01b815260040161315f919061493d565b602060405180830381865afa15801561317a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061319e9190616653565b6131a8919061674e565b6131b291906167bc565b9050919050565b365f8036915091509091565b5f80825f015f9054906101000a90046fffffffffffffffffffffffffffffffff169050825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff1603613264576040517f75e52f4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f20549150826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f205f905560018101835f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050919050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561337f5760d0826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401613376929190616825565b60405180910390fd5b819050919050565b5f80613396855f01858561403f565b91509150935093915050565b5f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561340e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134329190616653565b90505f61343e846143a7565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b1c5f4278888885f866040518663ffffffff1660e01b81526004016134a2959493929190616887565b602060405180830381865afa1580156134bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134e19190616901565b600c5f8a81526020019081526020015f2081905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f2a0bb08888885f86886040518763ffffffff1660e01b815260040161355a9695949392919061692c565b5f604051808303815f87803b158015613571575f80fd5b505af1158015613583573d5f803e3d5ffd5b5050505061359b8242613596919061640d565b61282e565b9250505095945050505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e38335e5348686865f6135f3886143a7565b6040518763ffffffff1660e01b8152600401613613959493929190616887565b5f604051808303818588803b15801561362a575f80fd5b505af115801561363c573d5f803e3d5ffd5b5050505050600c5f8681526020019081526020015f205f90555050505050565b5f8060045f8481526020019081526020015f2090505f815f01601e9054906101000a900460ff1690505f825f01601f9054906101000a900460ff16905081156136ab57600793505050506137ae565b80156136bd57600293505050506137ae565b5f6136c7866111e2565b90505f810361370d57856040517f6ad06075000000000000000000000000000000000000000000000000000000008152600401613704919061493d565b60405180910390fd5b5f613716611a92565b65ffffffffffff169050808210613734575f955050505050506137ae565b5f61373e88611c4f565b905081811061375657600196505050505050506137ae565b61375f886143c4565b1580613771575061376f88614408565b155b1561378557600396505050505050506137ae565b5f61378f89611b8b565b036137a357600496505050505050506137ae565b600596505050505050505b919050565b5f806137c18686868661442f565b90505f600c5f8381526020019081526020015f205490505f801b811461387d57600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4d252f5826040518263ffffffff1660e01b815260040161383b9190614fed565b5f604051808303815f87803b158015613852575f80fd5b505af1158015613864573d5f803e3d5ffd5b50505050600c5f8381526020019081526020015f205f90555b8192505050949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561390557507f000000000000000000000000000000000000000000000000000000000000000046145b15613932577f0000000000000000000000000000000000000000000000000000000000000000905061393d565b61393a614511565b90505b90565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f60418451036139c0575f805f602087015192506040870151915060608701515f1a90506139b2888285856145a6565b9550955095505050506139ce565b5f600285515f1b9250925092505b9250925092565b5f805f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401613a029291906169a0565b604051602081830303815290604052631626ba7e60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613a5491906169fe565b5f60405180830381855afa9150503d805f8114613a8c576040519150601f19603f3d011682016040523d82523d5f602084013e613a91565b606091505b5091509150818015613aa557506020815110155b8015613ae95750631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681806020019051810190613ae79190616901565b145b925050509392505050565b5f60095f8781526020019081526020015f209050806003015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613b9657846040517f71c6af49000000000000000000000000000000000000000000000000000000008152600401613b8d9190614a7a565b60405180910390fd5b6001816003015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f6002811115613c0057613bff615006565b5b60ff168460ff1603613c2a5782815f015f828254613c1e919061640d565b92505081905550613cdb565b60016002811115613c3e57613c3d615006565b5b60ff168460ff1603613c695782816001015f828254613c5d919061640d565b92505081905550613cda565b600280811115613c7c57613c7b615006565b5b60ff168460ff1603613ca75782816002015f828254613c9b919061640d565b92505081905550613cd9565b6040517f06b337c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b505050505050565b5f808203613cf3575f9050613dd4565b5f6001613cff8461468d565b901c6001901b90506001818481613d1957613d1861678f565b5b048201901c90506001818481613d3257613d3161678f565b5b048201901c90506001818481613d4b57613d4a61678f565b5b048201901c90506001818481613d6457613d6361678f565b5b048201901c90506001818481613d7d57613d7c61678f565b5b048201901c90506001818481613d9657613d9561678f565b5b048201901c90506001818481613daf57613dae61678f565b5b048201901c9050613dd081828581613dca57613dc961678f565b5b04614764565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015613e55575f613e00848461477c565b90508465ffffffffffff16613e158783613dd9565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff161115613e3f57809250613e4f565b600181613e4c919061640d565b93505b50613ded565b819050949350505050565b5f805f8360f81c90508060ff16602f108015613e7f5750603a8160ff16105b15613e94576001603082039250925050613ef2565b8060ff166040108015613eaa575060478160ff16105b15613ebf576001603782039250925050613ef2565b8060ff166060108015613ed5575060678160ff16105b15613eea576001605782039250925050613ef2565b5f8092509250505b915091565b5f63ffffffff8016821115613f46576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401613f3d929190616a4d565b60405180910390fd5b819050919050565b606060ff5f1b8314613f6a57613f63836147a1565b9050613ff5565b818054613f7690615c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054613fa290615c2d565b8015613fed5780601f10613fc457610100808354040283529160200191613fed565b820191905f5260205f20905b815481529060010190602001808311613fd057829003601f168201915b505050505090505b92915050565b5f8151111561400d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f858054905090505f8111156142bf575f614068876001846140639190615e85565b613dd9565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115614153576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff16036141d557846141848860018561417f9190615e85565b613dd9565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506142ae565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b80602001518593509350505061439f565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b5f813060601b6bffffffffffffffffffffffff1916189050919050565b5f8060095f8481526020019081526020015f209050806002015481600101546143ed919061640d565b6143fe6143f9856111e2565b611ec8565b1115915050919050565b5f8060095f8481526020019081526020015f209050805f0154816001015411915050919050565b5f8061443d86868686611d42565b90506144a18161444d6007612167565b6144576006612167565b6144616002612167565b60018060078081111561447757614476615006565b5b6144819190616a74565b600261448d9190616bd7565b6144979190615e85565b5f1b18181861218b565b50600160045f8381526020019081526020015f205f01601f6101000a81548160ff0219169083151502179055507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c816040516144fd919061493d565b60405180910390a180915050949350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161458b959493929190616c21565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156145e2575f600385925092509250614683565b5f6001888888886040515f81526020016040526040516146059493929190616c72565b6020604051602081039080840390855afa158015614625573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603614676575f60015f801b93509350935050614683565b805f805f1b935093509350505b9450945094915050565b5f805f90505f608084901c11156146ac57608083901c92506080810190505b5f604084901c11156146c657604083901c92506040810190505b5f602084901c11156146e057602083901c92506020810190505b5f601084901c11156146fa57601083901c92506010810190505b5f600884901c111561471457600883901c92506008810190505b5f600484901c111561472e57600483901c92506004810190505b5f600284901c111561474857600283901c92506002810190505b5f600184901c111561475b576001810190505b80915050919050565b5f8183106147725781614774565b825b905092915050565b5f600282841861478c91906167bc565b828416614799919061640d565b905092915050565b60605f6147ad83614813565b90505f602067ffffffffffffffff8111156147cb576147ca614ac5565b5b6040519080825280601f01601f1916602001820160405280156147fd5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f811115614858576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6148a681614872565b81146148b0575f80fd5b50565b5f813590506148c18161489d565b92915050565b5f602082840312156148dc576148db61486a565b5b5f6148e9848285016148b3565b91505092915050565b5f8115159050919050565b614906816148f2565b82525050565b5f60208201905061491f5f8301846148fd565b92915050565b5f819050919050565b61493781614925565b82525050565b5f6020820190506149505f83018461492e565b92915050565b61495f81614925565b8114614969575f80fd5b50565b5f8135905061497a81614956565b92915050565b5f602082840312156149955761499461486a565b5b5f6149a28482850161496c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6149ed826149ab565b6149f781856149b5565b9350614a078185602086016149c5565b614a10816149d3565b840191505092915050565b5f6020820190508181035f830152614a3381846149e3565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614a6482614a3b565b9050919050565b614a7481614a5a565b82525050565b5f602082019050614a8d5f830184614a6b565b92915050565b614a9c81614a5a565b8114614aa6575f80fd5b50565b5f81359050614ab781614a93565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614afb826149d3565b810181811067ffffffffffffffff82111715614b1a57614b19614ac5565b5b80604052505050565b5f614b2c614861565b9050614b388282614af2565b919050565b5f67ffffffffffffffff821115614b5757614b56614ac5565b5b614b60826149d3565b9050602081019050919050565b828183375f83830152505050565b5f614b8d614b8884614b3d565b614b23565b905082815260208101848484011115614ba957614ba8614ac1565b5b614bb4848285614b6d565b509392505050565b5f82601f830112614bd057614bcf614abd565b5b8135614be0848260208601614b7b565b91505092915050565b5f805f8060808587031215614c0157614c0061486a565b5b5f614c0e87828801614aa9565b9450506020614c1f87828801614aa9565b9350506040614c308782880161496c565b925050606085013567ffffffffffffffff811115614c5157614c5061486e565b5b614c5d87828801614bbc565b91505092959194509250565b614c7281614872565b82525050565b5f602082019050614c8b5f830184614c69565b92915050565b5f67ffffffffffffffff821115614cab57614caa614ac5565b5b602082029050602081019050919050565b5f80fd5b5f614cd2614ccd84614c91565b614b23565b90508083825260208201905060208402830185811115614cf557614cf4614cbc565b5b835b81811015614d1e5780614d0a8882614aa9565b845260208401935050602081019050614cf7565b5050509392505050565b5f82601f830112614d3c57614d3b614abd565b5b8135614d4c848260208601614cc0565b91505092915050565b5f67ffffffffffffffff821115614d6f57614d6e614ac5565b5b602082029050602081019050919050565b5f614d92614d8d84614d55565b614b23565b90508083825260208201905060208402830185811115614db557614db4614cbc565b5b835b81811015614dde5780614dca888261496c565b845260208401935050602081019050614db7565b5050509392505050565b5f82601f830112614dfc57614dfb614abd565b5b8135614e0c848260208601614d80565b91505092915050565b5f67ffffffffffffffff821115614e2f57614e2e614ac5565b5b602082029050602081019050919050565b5f614e52614e4d84614e15565b614b23565b90508083825260208201905060208402830185811115614e7557614e74614cbc565b5b835b81811015614ebc57803567ffffffffffffffff811115614e9a57614e99614abd565b5b808601614ea78982614bbc565b85526020850194505050602081019050614e77565b5050509392505050565b5f82601f830112614eda57614ed9614abd565b5b8135614eea848260208601614e40565b91505092915050565b5f819050919050565b614f0581614ef3565b8114614f0f575f80fd5b50565b5f81359050614f2081614efc565b92915050565b5f805f8060808587031215614f3e57614f3d61486a565b5b5f85013567ffffffffffffffff811115614f5b57614f5a61486e565b5b614f6787828801614d28565b945050602085013567ffffffffffffffff811115614f8857614f8761486e565b5b614f9487828801614de8565b935050604085013567ffffffffffffffff811115614fb557614fb461486e565b5b614fc187828801614ec6565b9250506060614fd287828801614f12565b91505092959194509250565b614fe781614ef3565b82525050565b5f6020820190506150005f830184614fde565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6008811061504457615043615006565b5b50565b5f81905061505482615033565b919050565b5f61506382615047565b9050919050565b61507381615059565b82525050565b5f60208201905061508c5f83018461506a565b92915050565b5f80604083850312156150a8576150a761486a565b5b5f6150b58582860161496c565b92505060206150c685828601614aa9565b9150509250929050565b5f6060820190506150e35f83018661492e565b6150f0602083018561492e565b6150fd604083018461492e565b949350505050565b5f60ff82169050919050565b61511a81615105565b8114615124575f80fd5b50565b5f8135905061513581615111565b92915050565b5f80604083850312156151515761515061486a565b5b5f61515e8582860161496c565b925050602061516f85828601615127565b9150509250929050565b5f80fd5b5f8083601f84011261519257615191614abd565b5b8235905067ffffffffffffffff8111156151af576151ae615179565b5b6020830191508360018202830111156151cb576151ca614cbc565b5b9250929050565b5f805f805f805f60c0888a0312156151ed576151ec61486a565b5b5f6151fa8a828b0161496c565b975050602061520b8a828b01615127565b965050604061521c8a828b01614aa9565b955050606088013567ffffffffffffffff81111561523d5761523c61486e565b5b6152498a828b0161517d565b9450945050608088013567ffffffffffffffff81111561526c5761526b61486e565b5b6152788a828b01614bbc565b92505060a088013567ffffffffffffffff8111156152995761529861486e565b5b6152a58a828b01614bbc565b91505092959891949750929550565b5f805f805f608086880312156152cd576152cc61486a565b5b5f6152da8882890161496c565b95505060206152eb88828901615127565b945050604086013567ffffffffffffffff81111561530c5761530b61486e565b5b6153188882890161517d565b9350935050606086013567ffffffffffffffff81111561533b5761533a61486e565b5b61534788828901614bbc565b9150509295509295909350565b5f65ffffffffffff82169050919050565b61536e81615354565b8114615378575f80fd5b50565b5f8135905061538981615365565b92915050565b5f602082840312156153a4576153a361486a565b5b5f6153b18482850161537b565b91505092915050565b5f805f80606085870312156153d2576153d161486a565b5b5f6153df8782880161496c565b94505060206153f087828801615127565b935050604085013567ffffffffffffffff8111156154115761541061486e565b5b61541d8782880161517d565b925092505092959194509250565b5f67ffffffffffffffff82111561544557615444614ac5565b5b61544e826149d3565b9050602081019050919050565b5f61546d6154688461542b565b614b23565b90508281526020810184848401111561548957615488614ac1565b5b615494848285614b6d565b509392505050565b5f82601f8301126154b0576154af614abd565b5b81356154c084826020860161545b565b91505092915050565b5f805f80608085870312156154e1576154e061486a565b5b5f85013567ffffffffffffffff8111156154fe576154fd61486e565b5b61550a87828801614d28565b945050602085013567ffffffffffffffff81111561552b5761552a61486e565b5b61553787828801614de8565b935050604085013567ffffffffffffffff8111156155585761555761486e565b5b61556487828801614ec6565b925050606085013567ffffffffffffffff8111156155855761558461486e565b5b6155918782880161549c565b91505092959194509250565b5f602082840312156155b2576155b161486a565b5b5f6155bf84828501614aa9565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6155fc816155c8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61563481614925565b82525050565b5f615645838361562b565b60208301905092915050565b5f602082019050919050565b5f61566782615602565b615671818561560c565b935061567c8361561c565b805f5b838110156156ac578151615693888261563a565b975061569e83615651565b92505060018101905061567f565b5085935050505092915050565b5f60e0820190506156cc5f83018a6155f3565b81810360208301526156de81896149e3565b905081810360408301526156f281886149e3565b9050615701606083018761492e565b61570e6080830186614a6b565b61571b60a0830185614fde565b81810360c083015261572d818461565d565b905098975050505050505050565b5f805f80608085870312156157535761575261486a565b5b5f6157608782880161496c565b945050602061577187828801615127565b935050604061578287828801614aa9565b925050606085013567ffffffffffffffff8111156157a3576157a261486e565b5b6157af87828801614bbc565b91505092959194509250565b6157c481615354565b82525050565b5f6020820190506157dd5f8301846157bb565b92915050565b5f805f606084860312156157fa576157f961486a565b5b5f61580786828701614aa9565b93505060206158188682870161496c565b925050604084013567ffffffffffffffff8111156158395761583861486e565b5b61584586828701614bbc565b9150509250925092565b5f61585982614a3b565b9050919050565b5f61586a8261584f565b9050919050565b61587a81615860565b8114615884575f80fd5b50565b5f8135905061589581615871565b92915050565b5f602082840312156158b0576158af61486a565b5b5f6158bd84828501615887565b91505092915050565b5f805f805f60a086880312156158df576158de61486a565b5b5f6158ec88828901614aa9565b95505060206158fd88828901614aa9565b945050604086013567ffffffffffffffff81111561591e5761591d61486e565b5b61592a88828901614de8565b935050606086013567ffffffffffffffff81111561594b5761594a61486e565b5b61595788828901614de8565b925050608086013567ffffffffffffffff8111156159785761597761486e565b5b61598488828901614bbc565b9150509295509295909350565b5f8083601f8401126159a6576159a5614abd565b5b8235905067ffffffffffffffff8111156159c3576159c2615179565b5b6020830191508360018202830111156159df576159de614cbc565b5b9250929050565b5f805f80606085870312156159fe576159fd61486a565b5b5f615a0b87828801614aa9565b9450506020615a1c8782880161496c565b935050604085013567ffffffffffffffff811115615a3d57615a3c61486e565b5b615a4987828801615991565b925092505092959194509250565b5f63ffffffff82169050919050565b615a6f81615a57565b8114615a79575f80fd5b50565b5f81359050615a8a81615a66565b92915050565b5f60208284031215615aa557615aa461486a565b5b5f615ab284828501615a7c565b91505092915050565b5f8060408385031215615ad157615ad061486a565b5b5f615ade85828601614aa9565b9250506020615aef8582860161496c565b9150509250929050565b5f805f805f60a08688031215615b1257615b1161486a565b5b5f615b1f88828901614aa9565b9550506020615b3088828901614aa9565b9450506040615b418882890161496c565b9350506060615b528882890161496c565b925050608086013567ffffffffffffffff811115615b7357615b7261486e565b5b615b7f88828901614bbc565b9150509295509295909350565b5f819050919050565b5f615baf615baa615ba584614a3b565b615b8c565b614a3b565b9050919050565b5f615bc082615b95565b9050919050565b5f615bd182615bb6565b9050919050565b615be181615bc7565b82525050565b5f602082019050615bfa5f830184615bd8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680615c4457607f821691505b602082108103615c5757615c56615c00565b5b50919050565b5f615c77615c72615c6d84615354565b615b8c565b614925565b9050919050565b615c8781615c5d565b82525050565b5f604082019050615ca05f83018561492e565b615cad6020830184615c7e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f615cf3615cee8461542b565b614b23565b905082815260208101848484011115615d0f57615d0e614ac1565b5b615d1a8482856149c5565b509392505050565b5f82601f830112615d3657615d35614abd565b5b8151615d46848260208601615ce1565b91505092915050565b5f60208284031215615d6457615d6361486a565b5b5f82015167ffffffffffffffff811115615d8157615d8061486e565b5b615d8d84828501615d22565b91505092915050565b5f81905092915050565b5f615dab8385615d96565b9350615db8838584614b6d565b82840190509392505050565b5f615dd0828486615da0565b91508190509392505050565b615de581615105565b82525050565b5f60e082019050615dfe5f83018a614fde565b615e0b602083018961492e565b615e186040830188615ddc565b615e256060830187614a6b565b615e32608083018661492e565b615e3f60a0830185614fde565b615e4c60c0830184614fde565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f615e8f82614925565b9150615e9a83614925565b9250828203905081811115615eb257615eb1615e58565b5b92915050565b5f615ec282615354565b9150615ecd83615354565b9250828203905065ffffffffffff811115615eeb57615eea615e58565b5b92915050565b5f606082019050615f045f830186614a6b565b615f11602083018561492e565b615f1e604083018461492e565b949350505050565b5f60a082019050615f395f830188614fde565b615f46602083018761492e565b615f536040830186615ddc565b615f606060830185614a6b565b615f6d608083018461492e565b9695505050505050565b5f81519050615f8581615365565b92915050565b5f60208284031215615fa057615f9f61486a565b5b5f615fad84828501615f77565b91505092915050565b5f615fc082615354565b9150615fcb83615354565b9250828201905065ffffffffffff811115615fe957615fe8615e58565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61602181614a5a565b82525050565b5f6160328383616018565b60208301905092915050565b5f602082019050919050565b5f61605482615fef565b61605e8185615ff9565b935061606983616009565b805f5b838110156160995781516160808882616027565b975061608b8361603e565b92505060018101905061606c565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6160f3826160cf565b6160fd81856160d9565b935061610d8185602086016149c5565b616116816149d3565b840191505092915050565b5f61612c83836160e9565b905092915050565b5f602082019050919050565b5f61614a826160a6565b61615481856160b0565b935083602082028501616166856160c0565b805f5b858110156161a157848403895281516161828582616121565b945061618d83616134565b925060208a01995050600181019050616169565b50829750879550505050505092915050565b5f6080820190508181035f8301526161cb818761604a565b905081810360208301526161df818661565d565b905081810360408301526161f38185616140565b90506162026060830184614fde565b95945050505050565b5f60408201905061621e5f83018561492e565b61622b602083018461492e565b9392505050565b5f6060820190506162455f83018661492e565b616252602083018561506a565b61625f6040830184614fde565b949350505050565b616270816148f2565b811461627a575f80fd5b50565b5f8151905061628b81616267565b92915050565b5f602082840312156162a6576162a561486a565b5b5f6162b38482850161627d565b91505092915050565b5f6080820190506162cf5f83018761492e565b6162dc6020830186615ddc565b6162e9604083018561492e565b81810360608301526162fb81846149e3565b905095945050505050565b5f82825260208201905092915050565b5f616320826160cf565b61632a8185616306565b935061633a8185602086016149c5565b616343816149d3565b840191505092915050565b5f60a0820190506163615f83018861492e565b61636e6020830187615ddc565b61637b604083018661492e565b818103606083015261638d81856149e3565b905081810360808301526163a18184616316565b90509695505050505050565b5f819050919050565b5f6163d06163cb6163c6846163ad565b615b8c565b615105565b9050919050565b6163e0816163b6565b82525050565b5f6040820190506163f95f8301856163d7565b616406602083018461492e565b9392505050565b5f61641782614925565b915061642283614925565b925082820190508082111561643a57616439615e58565b5b92915050565b5f6040820190506164535f830185615c7e565b6164606020830184615c7e565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6164aa826149ab565b6164b48185616490565b93506164c48185602086016149c5565b6164cd816149d3565b840191505092915050565b5f6164e383836164a0565b905092915050565b5f602082019050919050565b5f61650182616467565b61650b8185616471565b93508360208202850161651d85616481565b805f5b85811015616558578484038952815161653985826164d8565b9450616544836164eb565b925060208a01995050600181019050616520565b50829750879550505050505092915050565b5f6101208201905061657e5f83018c61492e565b61658b602083018b614a6b565b818103604083015261659d818a61604a565b905081810360608301526165b1818961565d565b905081810360808301526165c581886164f7565b905081810360a08301526165d98187616140565b90506165e860c083018661492e565b6165f560e083018561492e565b81810361010083015261660881846149e3565b90509a9950505050505050505050565b5f60408201905061662b5f830185614a6b565b616638602083018461492e565b9392505050565b5f8151905061664d81614956565b92915050565b5f602082840312156166685761666761486a565b5b5f6166758482850161663f565b91505092915050565b5f6040820190506166915f830185614a6b565b61669e6020830184614a6b565b9392505050565b5f819050919050565b5f6166c86166c36166be846166a5565b615b8c565b614925565b9050919050565b6166d8816166ae565b82525050565b5f6020820190506166f15f8301846166cf565b92915050565b5f61671161670c61670784615a57565b615b8c565b614925565b9050919050565b616721816166f7565b82525050565b5f60408201905061673a5f830185616718565b6167476020830184616718565b9392505050565b5f61675882614925565b915061676383614925565b925082820261677181614925565b9150828204841483151761678857616787615e58565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6167c682614925565b91506167d183614925565b9250826167e1576167e061678f565b5b828204905092915050565b5f819050919050565b5f61680f61680a616805846167ec565b615b8c565b615105565b9050919050565b61681f816167f5565b82525050565b5f6040820190506168385f830185616816565b616845602083018461492e565b9392505050565b5f815f1b9050919050565b5f61687161686c616867846166a5565b61684c565b614ef3565b9050919050565b61688181616857565b82525050565b5f60a0820190508181035f83015261689f818861604a565b905081810360208301526168b3818761565d565b905081810360408301526168c78186616140565b90506168d66060830185616878565b6168e36080830184614fde565b9695505050505050565b5f815190506168fb81614efc565b92915050565b5f602082840312156169165761691561486a565b5b5f616923848285016168ed565b91505092915050565b5f60c0820190508181035f830152616944818961604a565b90508181036020830152616958818861565d565b9050818103604083015261696c8187616140565b905061697b6060830186616878565b6169886080830185614fde565b61699560a083018461492e565b979650505050505050565b5f6040820190506169b35f830185614fde565b81810360208301526169c58184616316565b90509392505050565b5f6169d8826160cf565b6169e28185615d96565b93506169f28185602086016149c5565b80840191505092915050565b5f616a0982846169ce565b915081905092915050565b5f819050919050565b5f616a37616a32616a2d84616a14565b615b8c565b615105565b9050919050565b616a4781616a1d565b82525050565b5f604082019050616a605f830185616a3e565b616a6d602083018461492e565b9392505050565b5f616a7e82615105565b9150616a8983615105565b9250828201905060ff811115616aa257616aa1615e58565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115616afd57808604811115616ad957616ad8615e58565b5b6001851615616ae85780820291505b8081029050616af685616aa8565b9450616abd565b94509492505050565b5f82616b155760019050616bd0565b81616b22575f9050616bd0565b8160018114616b385760028114616b4257616b71565b6001915050616bd0565b60ff841115616b5457616b53615e58565b5b8360020a915084821115616b6b57616b6a615e58565b5b50616bd0565b5060208310610133831016604e8410600b8410161715616ba65782820a905083811115616ba157616ba0615e58565b5b616bd0565b616bb38484846001616ab4565b92509050818404811115616bca57616bc9615e58565b5b81810290505b9392505050565b5f616be182614925565b9150616bec83615105565b9250616c197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484616b06565b905092915050565b5f60a082019050616c345f830188614fde565b616c416020830187614fde565b616c4e6040830186614fde565b616c5b606083018561492e565b616c686080830184614a6b565b9695505050505050565b5f608082019050616c855f830187614fde565b616c926020830186615ddc565b616c9f6040830185614fde565b616cac6060830184614fde565b9594505050505056fea2646970667358221220471c208304acea3054fd5039e7773c86282be71dcf4100ca1f8b478f208e066f64736f6c634300081a0033" + +export const DAO_ABI = [ + { + inputs: [ + { + internalType: "contract IVotes", + name: "_token", + type: "address" + }, + { + internalType: "contract TimelockController", + name: "_timelock", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "CheckpointUnorderedInsertion", + type: "error" + }, + { + inputs: [], + name: "FailedInnerCall", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "GovernorAlreadyCastVote", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "GovernorAlreadyQueuedProposal", + type: "error" + }, + { + inputs: [], + name: "GovernorDisabledDeposit", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + }, + { + internalType: "uint256", + name: "votes", + type: "uint256" + }, + { + internalType: "uint256", + name: "threshold", + type: "uint256" + } + ], + name: "GovernorInsufficientProposerVotes", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "targets", + type: "uint256" + }, + { + internalType: "uint256", + name: "calldatas", + type: "uint256" + }, + { + internalType: "uint256", + name: "values", + type: "uint256" + } + ], + name: "GovernorInvalidProposalLength", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "quorumNumerator", + type: "uint256" + }, + { + internalType: "uint256", + name: "quorumDenominator", + type: "uint256" + } + ], + name: "GovernorInvalidQuorumFraction", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address" + } + ], + name: "GovernorInvalidSignature", + type: "error" + }, + { + inputs: [], + name: "GovernorInvalidVoteType", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "votingPeriod", + type: "uint256" + } + ], + name: "GovernorInvalidVotingPeriod", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "GovernorNonexistentProposal", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "GovernorNotQueuedProposal", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "GovernorOnlyExecutor", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "GovernorOnlyProposer", + type: "error" + }, + { + inputs: [], + name: "GovernorQueueNotImplemented", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "proposer", + type: "address" + } + ], + name: "GovernorRestrictedProposer", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "enum IGovernor.ProposalState", + name: "current", + type: "uint8" + }, + { + internalType: "bytes32", + name: "expectedStates", + type: "bytes32" + } + ], + name: "GovernorUnexpectedProposalState", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "currentNonce", + type: "uint256" + } + ], + name: "InvalidAccountNonce", + type: "error" + }, + { + inputs: [], + name: "InvalidShortString", + type: "error" + }, + { + inputs: [], + name: "QueueEmpty", + type: "error" + }, + { + inputs: [], + name: "QueueFull", + type: "error" + }, + { + inputs: [ + { + internalType: "uint8", + name: "bits", + type: "uint8" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "SafeCastOverflowedUintDowncast", + type: "error" + }, + { + inputs: [ + { + internalType: "string", + name: "str", + type: "string" + } + ], + name: "StringTooLong", + type: "error" + }, + { + anonymous: false, + inputs: [], + name: "EIP712DomainChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalCanceled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: false, + internalType: "address", + name: "proposer", + type: "address" + }, + { + indexed: false, + internalType: "address[]", + name: "targets", + type: "address[]" + }, + { + indexed: false, + internalType: "uint256[]", + name: "values", + type: "uint256[]" + }, + { + indexed: false, + internalType: "string[]", + name: "signatures", + type: "string[]" + }, + { + indexed: false, + internalType: "bytes[]", + name: "calldatas", + type: "bytes[]" + }, + { + indexed: false, + internalType: "uint256", + name: "voteStart", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "voteEnd", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + } + ], + name: "ProposalCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "ProposalExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "etaSeconds", + type: "uint256" + } + ], + name: "ProposalQueued", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "oldProposalThreshold", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "newProposalThreshold", + type: "uint256" + } + ], + name: "ProposalThresholdSet", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "oldQuorumNumerator", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "newQuorumNumerator", + type: "uint256" + } + ], + name: "QuorumNumeratorUpdated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldTimelock", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newTimelock", + type: "address" + } + ], + name: "TimelockChange", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: false, + internalType: "uint8", + name: "support", + type: "uint8" + }, + { + indexed: false, + internalType: "uint256", + name: "weight", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "reason", + type: "string" + } + ], + name: "VoteCast", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "voter", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + indexed: false, + internalType: "uint8", + name: "support", + type: "uint8" + }, + { + indexed: false, + internalType: "uint256", + name: "weight", + type: "uint256" + }, + { + indexed: false, + internalType: "string", + name: "reason", + type: "string" + }, + { + indexed: false, + internalType: "bytes", + name: "params", + type: "bytes" + } + ], + name: "VoteCastWithParams", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "oldVotingDelay", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "newVotingDelay", + type: "uint256" + } + ], + name: "VotingDelaySet", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "oldVotingPeriod", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "newVotingPeriod", + type: "uint256" + } + ], + name: "VotingPeriodSet", + type: "event" + }, + { + inputs: [], + name: "BALLOT_TYPEHASH", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "CLOCK_MODE", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "COUNTING_MODE", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "EXTENDED_BALLOT_TYPEHASH", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "targets", + type: "address[]" + }, + { + internalType: "uint256[]", + name: "values", + type: "uint256[]" + }, + { + internalType: "bytes[]", + name: "calldatas", + type: "bytes[]" + }, + { + internalType: "bytes32", + name: "descriptionHash", + type: "bytes32" + } + ], + name: "cancel", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "uint8", + name: "support", + type: "uint8" + } + ], + name: "castVote", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "uint8", + name: "support", + type: "uint8" + }, + { + internalType: "address", + name: "voter", + type: "address" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + name: "castVoteBySig", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "uint8", + name: "support", + type: "uint8" + }, + { + internalType: "string", + name: "reason", + type: "string" + } + ], + name: "castVoteWithReason", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "uint8", + name: "support", + type: "uint8" + }, + { + internalType: "string", + name: "reason", + type: "string" + }, + { + internalType: "bytes", + name: "params", + type: "bytes" + } + ], + name: "castVoteWithReasonAndParams", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "uint8", + name: "support", + type: "uint8" + }, + { + internalType: "address", + name: "voter", + type: "address" + }, + { + internalType: "string", + name: "reason", + type: "string" + }, + { + internalType: "bytes", + name: "params", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + name: "castVoteWithReasonAndParamsBySig", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "clock", + outputs: [ + { + internalType: "uint48", + name: "", + type: "uint48" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "eip712Domain", + outputs: [ + { + internalType: "bytes1", + name: "fields", + type: "bytes1" + }, + { + internalType: "string", + name: "name", + type: "string" + }, + { + internalType: "string", + name: "version", + type: "string" + }, + { + internalType: "uint256", + name: "chainId", + type: "uint256" + }, + { + internalType: "address", + name: "verifyingContract", + type: "address" + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32" + }, + { + internalType: "uint256[]", + name: "extensions", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "targets", + type: "address[]" + }, + { + internalType: "uint256[]", + name: "values", + type: "uint256[]" + }, + { + internalType: "bytes[]", + name: "calldatas", + type: "bytes[]" + }, + { + internalType: "bytes32", + name: "descriptionHash", + type: "bytes32" + } + ], + name: "execute", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "timepoint", + type: "uint256" + } + ], + name: "getVotes", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "timepoint", + type: "uint256" + }, + { + internalType: "bytes", + name: "params", + type: "bytes" + } + ], + name: "getVotesWithParams", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "hasVoted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "targets", + type: "address[]" + }, + { + internalType: "uint256[]", + name: "values", + type: "uint256[]" + }, + { + internalType: "bytes[]", + name: "calldatas", + type: "bytes[]" + }, + { + internalType: "bytes32", + name: "descriptionHash", + type: "bytes32" + } + ], + name: "hashProposal", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "uint256[]", + name: "", + type: "uint256[]" + }, + { + internalType: "uint256[]", + name: "", + type: "uint256[]" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + name: "onERC1155BatchReceived", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "proposalDeadline", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "proposalEta", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "proposalNeedsQueuing", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "proposalProposer", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "proposalSnapshot", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "proposalThreshold", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "proposalVotes", + outputs: [ + { + internalType: "uint256", + name: "againstVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "forVotes", + type: "uint256" + }, + { + internalType: "uint256", + name: "abstainVotes", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "targets", + type: "address[]" + }, + { + internalType: "uint256[]", + name: "values", + type: "uint256[]" + }, + { + internalType: "bytes[]", + name: "calldatas", + type: "bytes[]" + }, + { + internalType: "string", + name: "description", + type: "string" + } + ], + name: "propose", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "targets", + type: "address[]" + }, + { + internalType: "uint256[]", + name: "values", + type: "uint256[]" + }, + { + internalType: "bytes[]", + name: "calldatas", + type: "bytes[]" + }, + { + internalType: "bytes32", + name: "descriptionHash", + type: "bytes32" + } + ], + name: "queue", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "blockNumber", + type: "uint256" + } + ], + name: "quorum", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "quorumDenominator", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "timepoint", + type: "uint256" + } + ], + name: "quorumNumerator", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "quorumNumerator", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "relay", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "newProposalThreshold", + type: "uint256" + } + ], + name: "setProposalThreshold", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint48", + name: "newVotingDelay", + type: "uint48" + } + ], + name: "setVotingDelay", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint32", + name: "newVotingPeriod", + type: "uint32" + } + ], + name: "setVotingPeriod", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "proposalId", + type: "uint256" + } + ], + name: "state", + outputs: [ + { + internalType: "enum IGovernor.ProposalState", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4" + } + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "timelock", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "token", + outputs: [ + { + internalType: "contract IERC5805", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "newQuorumNumerator", + type: "uint256" + } + ], + name: "updateQuorumNumerator", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract TimelockController", + name: "newTimelock", + type: "address" + } + ], + name: "updateTimelock", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "votingDelay", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "votingPeriod", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +] + +export const wrapperAbiGlobal = [ + { + inputs: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string" + }, + { + internalType: "string", + name: "symbol", + type: "string" + }, + { + internalType: "string", + name: "description", + type: "string" + }, + { + internalType: "uint8", + name: "decimals", + type: "uint8" + }, + { + internalType: "uint256", + name: "executionDelay", + type: "uint256" + }, + { + internalType: "address[]", + name: "initialMembers", + type: "address[]" + }, + { + internalType: "uint256[]", + name: "initialAmounts", + type: "uint256[]" + }, + { + internalType: "string[]", + name: "keys", + type: "string[]" + }, + { + internalType: "string[]", + name: "values", + type: "string[]" + } + ], + internalType: "struct WrapperContract.DaoParams", + name: "params", + type: "tuple" + } + ], + name: "deployDAOwithToken", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_tokenFactory", + type: "address" + }, + { + internalType: "address", + name: "_timelockFactory", + type: "address" + }, + { + internalType: "address", + name: "_daoFactory", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "dao", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "token", + type: "address" + }, + { + indexed: false, + internalType: "address[]", + name: "initialMembers", + type: "address[]" + }, + { + indexed: false, + internalType: "uint256[]", + name: "initialAmounts", + type: "uint256[]" + }, + { + indexed: false, + internalType: "string", + name: "name", + type: "string" + }, + { + indexed: false, + internalType: "string", + name: "symbol", + type: "string" + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string" + }, + { + indexed: false, + internalType: "uint256", + name: "executionDelay", + type: "uint256" + }, + { + indexed: false, + internalType: "address", + name: "registry", + type: "address" + }, + { + indexed: false, + internalType: "string[]", + name: "keys", + type: "string[]" + }, + { + indexed: false, + internalType: "string[]", + name: "values", + type: "string[]" + } + ], + name: "NewDaoCreated", + type: "event" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "deployedDAOs", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "deployedRegistries", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "deployedTimelocks", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "deployedTokens", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getNumberOfDAOs", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + } +] diff --git a/src/services/contracts/etherlinkDAO/hooks/useEvmDaoCreateStore.tsx b/src/services/contracts/etherlinkDAO/hooks/useEvmDaoCreateStore.tsx index 4336105b..da89d64b 100644 --- a/src/services/contracts/etherlinkDAO/hooks/useEvmDaoCreateStore.tsx +++ b/src/services/contracts/etherlinkDAO/hooks/useEvmDaoCreateStore.tsx @@ -1,6 +1,18 @@ +import { ethers } from "ethers" import { create } from "zustand" import { STEPS } from "modules/etherlink/config" import { useHistory } from "react-router-dom" +import HbEvmAbi from "assets/abis/hb_evm.json" +import HbDaoAbi from "assets/abis/hb_dao.json" +import HbTimelockAbi from "assets/abis/hb_timelock.json" +import HbWrapperAbi from "assets/abis/hb_wrapper.json" + +import { useCallback, useState } from "react" +import { useTezos } from "services/beacon/hooks/useTezos" +import { DAO_ABI, DAO_BYTECODE, wrapperAbiGlobal } from "./temp-config" + +// const DAO_ABI = HbDaoAbi.output.abi +// const DAO_BYTECODE = HbDaoAbi.output.bytecode interface EvmDaoCreateStore { currentStep: number @@ -81,16 +93,146 @@ const useEvmDaoCreateZustantStore = create((set, get) => ({ })) const useEvmDaoCreateStore = () => { + const [isDeploying, setIsDeploying] = useState(false) const data = useEvmDaoCreateZustantStore() const history = useHistory() + const { etherlink } = useTezos() + const initialMembers = ["0x1E4f6Bbb0448ad06b7b777BBBe6909385d477EE1"] + const initialAmounts = [1000] + const minDelay = 0 + const minVotingDelay = 4 + const proposalThreshhold = 1 + const quorumRequired = 1 + + const proposers = [] as string[] + const executors = [] as string[] + + const deployDao = useCallback(async () => { + const daoData = data.data + + try { + const tokenFactory = new ethers.ContractFactory(HbEvmAbi.abi, HbEvmAbi.bytecode, etherlink.signer) + const timelockFactory = new ethers.ContractFactory(HbTimelockAbi.abi, HbTimelockAbi.bytecode, etherlink.signer) + const daoFactory = new ethers.ContractFactory(HbDaoAbi.abi, HbDaoAbi.bytecode, etherlink.signer) + + const token = await tokenFactory.deploy("MyToken", "MTK", 3, initialMembers, initialAmounts) + await token.waitForDeployment() + console.log("Token deployed at:", token.target) + + const deployedToken = new ethers.Contract(token.target, HbEvmAbi.abi, etherlink.signer) + const setDelegateTx = await deployedToken.delegate(etherlink.signer.address) + await setDelegateTx.wait() + console.log("Token delegate set at:", etherlink.signer.address) + + console.log("Deploying TimeLockController contract...") + + const timeLock = await timelockFactory.deploy(minDelay, proposers, executors, etherlink.signer.address) + await timeLock.waitForDeployment() + console.log("TimeLockController deployed at:", timeLock.target) + + const hbDao = await daoFactory.deploy( + deployedToken.target, + timeLock.target, + "AKDAO", + minDelay, + minVotingDelay, + proposalThreshhold, + quorumRequired + ) + await hbDao.waitForDeployment() + console.log("HomebaseDAO deployed at:", hbDao.target) + } catch (e) { + console.error("Error deploying DAO", e) + return null + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [data.data]) + + const deployDaoWrapper = useCallback(async () => { + const daoData = data.data + + try { + const wrapperFactory = new ethers.ContractFactory(HbWrapperAbi.abi, HbWrapperAbi.bytecode, etherlink.signer) + const wrapper = await wrapperFactory.deploy( + "AK DAO1", // DAO Name + "AKD", // DAO Symbol + "About DAO1", // DAO Description + "3", // Token Decimals + "6", // Execution Delay in minutes + initialMembers, // Initial Members + [ + ...initialAmounts, // Members 1 Token Allocation + "5", // voting delay in minutes + "10", // voting duration in minutes (e.g.10 minutes) + "1", // proposal threshold (1% of total supply) + "4" // quorum (4% of total supply) + ], + ["RKEY"], // Registry Keys + ["RVALUE"] // Registry Values + ) + await wrapper.waitForDeployment() + const wrapperAddress = await wrapper.getAddress() + console.log("Wrapper deployed at:", wrapperAddress) + + // const contract = await factory.deploy( + // "AK DAO1", // DAO Name + // "AKD", // DAO Symbol + // "About DAO1", // DAO Description + // "3", // Token Decimals + // "6", // Execution Delay in minutes + // ["0x1E4f6Bbb0448ad06b7b777BBBe6909385d477EE1"], // Initial Members + // [ + // "1000", // Members 1 Token Allocation + // "5", // voting delay in minutes + // "10", // voting duration in minutes (e.g.10 minutes) + // "1", // proposal threshold (1% of total supply) + // "4" // quorum (4% of total supply) + // ], + // ["RKEY"], // Registry Keys + // ["RVALUE"] // Registry Values + // ) + // const contract = await factory.deploy( + // "AK DAO1", // DAO Name + // "AKD", // DAO Symbol + // "About DAO1", // DAO Description + // "3", // Token Decimals + // "6", // Execution Delay in minutes + // ["0x1E4f6Bbb0448ad06b7b777BBBe6909385d477EE1"], // Initial Members + // [ + // "1000", // Members 1 Token Allocation + // "5", // voting delay in minutes + // "10", // voting duration in minutes (e.g.10 minutes) + // "1", // proposal threshold (1% of total supply) + // "4" // quorum (4% of total supply) + // ], + // ["RKEY"], // Registry Keys + // ["RVALUE"] // Registry Values + // ) + + // await contract.waitForDeployment() + // const contractAddress = await contract.getAddress() + // alert("Contract deployed at: " + contractAddress) + // return contractAddress + } catch (error) { + console.error("Error deploying DAO", error) + return null + } + }, [data.data, etherlink.signer]) + const isFinalStep = data.currentStep === STEPS.length - 1 + return { ...data, + deployDao, next: { - text: "Next", + text: isFinalStep ? "Deploy" : "Next", handler: () => { - const nextStep = data.next.handler() - if (nextStep) { - history.push(nextStep) + if (isFinalStep) { + deployDao() + } else { + const nextStep = data.next.handler() + if (nextStep) { + history.push(nextStep) + } } } }, diff --git a/src/services/contracts/token/hooks/useToken.ts b/src/services/contracts/token/hooks/useToken.ts index 9f13d031..339cbd2b 100644 --- a/src/services/contracts/token/hooks/useToken.ts +++ b/src/services/contracts/token/hooks/useToken.ts @@ -20,13 +20,14 @@ export const useTokenOriginate = (tokenData: TokenContractParams) => { const { tezos, connect, network, account, etherlink } = useTezos() const provider = etherlink.provider const signer = etherlink.signer + console.log({ provider }) const openNotification = useNotification() const result = useMutation, Error, TokenContractParams>( async ({ tokenDistribution, tokenSettings }) => { console.log({ tokenDistribution, tokenSettings, network }) - console.log({ provider }) + if (network.startsWith("etherlink")) { try { console.log("Deployer", signer?.getAddress()) diff --git a/src/services/wagmi/context.tsx b/src/services/wagmi/context.tsx index 7f812607..ef4bb04e 100644 --- a/src/services/wagmi/context.tsx +++ b/src/services/wagmi/context.tsx @@ -10,6 +10,7 @@ import { useParams } from "react-router-dom" import { ProposalStatus } from "services/services/dao/mappers/proposal/types" import { useTezos } from "services/beacon/hooks/useTezos" import dayjs from "dayjs" +import { ethers } from "ethers" interface EtherlinkType { isConnected: boolean @@ -53,8 +54,13 @@ const useEtherlinkDao = ({ network }: { network: string }) => { const [daoData, setDaoData] = useState([]) const [daoSelected, setDaoSelected] = useState({}) + const [daoRegistryDetails, setDaoRegistryDetails] = useState<{ + balance: string + }>({ balance: "0" }) + const [daoProposals, setDaoProposals] = useState([]) const [daoProposalSelected, setDaoProposalSelected] = useState({}) + const [daoMembers, setDaoMembers] = useState([]) const { data: firestoreData, loading, fetchCollection } = useFirestoreStore() @@ -114,12 +120,26 @@ const useEtherlinkDao = ({ network }: { network: string }) => { if (daoSelected.id && firebaseRootCollection) { fetchCollection(`${firebaseRootCollection}/${daoSelected.id}/proposals`) fetchCollection(`${firebaseRootCollection}/${daoSelected.id}/members`) + console.log({ daoSelected }) + // TODO: Replace this with proper service + fetch(`https://testnet.explorer.etherlink.com/api/v2/addresses/${daoSelected.registryAddress}`) + .then(res => res.json()) + .then(data => { + const tokenDecimals = daoSelected.decimals + const coinBalance = data?.coin_balance + const ethBalance = ethers.formatEther(coinBalance) + setDaoRegistryDetails({ + balance: ethBalance + }) + console.log("Treasury Data", ethBalance) + }) } }, [daoSelected, fetchCollection, firebaseRootCollection]) return { daos: daoData, daoSelected, + daoRegistryDetails, daoProposals, daoProposalSelected, daoMembers, @@ -203,6 +223,7 @@ export const EtherlinkProvider: React.FC<{ children: ReactNode }> = ({ children daos, isLoadingDaos, daoSelected, + daoRegistryDetails, daoProposals, isLoadingDaoProposals, daoProposalSelected, @@ -235,6 +256,7 @@ export const EtherlinkProvider: React.FC<{ children: ReactNode }> = ({ children isLoadingDaos, isLoadingDaoProposals, daoSelected, + daoRegistryDetails, daoProposals, daoProposalSelected, daoMembers,