2k txs
2.3k calls
constructor
constructor(address[] _gcaAgents, address _glowToken, address _governance, bytes32 _requirementsHash, address _earlyLiquidity, address _usdcToken, address _vetoCouncil, address _holdingContract, address _gcc) payable
functions
allGcas
viewfunction allGcas() view returns (address[])
amountWithdrawnAtPaymentNonce
viewfunction amountWithdrawnAtPaymentNonce(address, uint256) view returns (uint256)
bucket
viewfunction bucket(uint256 bucketId) view returns (tuple bucket)
bucketClaimBitmap
viewfunction bucketClaimBitmap(uint256 bucketId, address user) view returns (uint256)
bucketDelayDuration
purefunction bucketDelayDuration() pure returns (uint256)
bucketEndSubmissionTimestampNotReinstated
viewfunction bucketEndSubmissionTimestampNotReinstated(uint256 bucketId) view returns (uint128)
bucketFinalizationTimestampNotReinstated
viewfunction bucketFinalizationTimestampNotReinstated(uint256 bucketId) view returns (uint128)
bucketGlobalState
viewfunction bucketGlobalState(uint256 bucketId) view returns (tuple)
bucketStartSubmissionTimestampNotReinstated
viewfunction bucketStartSubmissionTimestampNotReinstated(uint256 bucketId) view returns (uint128)
CLAIM_PAYOUT_RELAY_PERMIT_TYPEHASH
viewfunction CLAIM_PAYOUT_RELAY_PERMIT_TYPEHASH() view returns (bytes32)
createClaimRewardFromBucketDigest
viewfunction createClaimRewardFromBucketDigest(uint256 bucketId, uint256 glwWeight, uint256 usdcWeight, uint256 index, bool claimFromInflation) view returns (bytes32)
createRelayDigest
viewfunction createRelayDigest(address relayer, uint256 paymentNonce, uint256 relayNonce) view returns (bytes32)
currentBucket
viewfunction currentBucket() view returns (uint256)
earlyLiquidity
viewfunction earlyLiquidity() view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
gcaAgents
viewfunction gcaAgents(uint256) view returns (address)
gcaPayoutData
viewfunction gcaPayoutData(address gca) view returns (tuple)
GCC
viewfunction GCC() view returns (address)
GENESIS_TIMESTAMP
viewfunction GENESIS_TIMESTAMP() view returns (uint256)
getBucketTracker
viewfunction getBucketTracker() view returns (tuple)
getPayoutData
viewfunction getPayoutData(address user, uint256 paymentNonce, address[] activeGCAsAtPaymentNonce, uint256 userIndex) view returns (uint256 withdrawableAmount, uint256 slashableAmount, uint256 amountAlreadyWithdrawn)
getProposalHashes
viewfunction getProposalHashes() view returns (bytes32[])
getProposalHashes
viewfunction getProposalHashes(uint256 start, uint256 end) view returns (bytes32[])
GLOW_REWARDS_PER_BUCKET
viewfunction GLOW_REWARDS_PER_BUCKET() view returns (uint256)
GLOW_TOKEN
viewfunction GLOW_TOKEN() view returns (address)
GOVERNANCE
viewfunction GOVERNANCE() view returns (address)
hasBucketBeenDelayed
viewfunction hasBucketBeenDelayed(uint256 bucketId) view returns (bool)
HOLDING_CONTRACT
viewfunction HOLDING_CONTRACT() view returns (address)
isBucketFinalized
viewfunction isBucketFinalized(uint256 bucketId) view returns (bool)
isGCA
viewfunction isGCA(address account, uint256 index) view returns (bool)
isGCA
viewfunction isGCA(address account) view returns (bool)
isSlashed
viewfunction isSlashed(address) view returns (bool)
nextProposalIndexToUpdate
viewfunction nextProposalIndexToUpdate() view returns (uint256)
nextRelayNonce
viewfunction nextRelayNonce(address) view returns (uint256)
OFFSET_LEFT
viewfunction OFFSET_LEFT() view returns (uint256)
OFFSET_RIGHT
viewfunction OFFSET_RIGHT() view returns (uint256)
paymentNonce
viewfunction paymentNonce() view returns (uint256)
paymentNonceToCompensationPlan
viewfunction paymentNonceToCompensationPlan(uint256 nonce, uint256 index) view returns (uint32[5])
paymentNonceToShiftStartTimestamp
viewfunction paymentNonceToShiftStartTimestamp(uint256 nonce) view returns (uint256)
payoutNonceToGCAHash
viewfunction payoutNonceToGCAHash(uint256 nonce) view returns (bytes32)
proposalHashes
viewfunction proposalHashes(uint256) view returns (bytes32)
requirementsHash
viewfunction requirementsHash() view returns (bytes32)
reward
viewfunction reward(uint256 id) view returns (tuple)
REWARDS_PER_SECOND_FOR_ALL
viewfunction REWARDS_PER_SECOND_FOR_ALL() view returns (uint256)
SHARES_REQUIRED_PER_COMP_PLAN
viewfunction SHARES_REQUIRED_PER_COMP_PLAN() view returns (uint256)
slashNonce
viewfunction slashNonce() view returns (uint256)
slashNonceToSlashTimestamp
viewfunction slashNonceToSlashTimestamp(uint256) view returns (uint256)
TOTAL_VESTING_PERIODS
viewfunction TOTAL_VESTING_PERIODS() view returns (uint256)
USDC
viewfunction USDC() view returns (address)
claimGlowFromInflation
nonpayablefunction claimGlowFromInflation()
claimPayout
nonpayablefunction claimPayout(address user, uint256 paymentNonce, address[] activeGCAsAtPaymentNonce, uint256 userIndex, bool claimFromInflation, bytes sig)
claimRewardFromBucket
nonpayablefunction claimRewardFromBucket(uint256 bucketId, uint256 glwWeight, uint256 usdcWeight, bytes32[] proof, uint256 index, address user, bool claimFromInflation, bytes signature)
delayBucketFinalization
nonpayablefunction delayBucketFinalization(uint256 bucketId)
donateToUSDCMinerRewardsPool
nonpayablefunction donateToUSDCMinerRewardsPool(uint256 amount)
donateToUSDCMinerRewardsPoolEarlyLiquidity
nonpayablefunction donateToUSDCMinerRewardsPoolEarlyLiquidity(uint256 amount)
executeAgainstHash
nonpayablefunction executeAgainstHash(address[] gcasToSlash, address[] newGCAs, uint256 proposalCreationTimestamp)
handleMintToCarbonCreditAuction
nonpayablefunction handleMintToCarbonCreditAuction(uint256 bucketId)
pushHash
nonpayablefunction pushHash(bytes32 hash, bool incrementSlashNonce)
setRequirementsHash
nonpayablefunction setRequirementsHash(bytes32 _requirementsHash)
submitCompensationPlan
nonpayablefunction submitCompensationPlan(uint32[5] plan, uint256 indexOfGCA)
submitWeeklyReport
nonpayablefunction submitWeeklyReport(uint256 bucketId, uint256 totalNewGCC, uint256 totalGlwRewardsWeight, uint256 totalGRCRewardsWeight, bytes32 root)
submitWeeklyReportWithBytes
nonpayablefunction submitWeeklyReportWithBytes(uint256 bucketId, uint256 totalNewGCC, uint256 totalGlwRewardsWeight, uint256 totalGRCRewardsWeight, bytes32 root, bytes data)
events
AmountDonatedToBucket
event AmountDonatedToBucket(uint256 indexed bucketId, uint256 totalAmountDonated)
BucketSubmissionEvent
event BucketSubmissionEvent(uint256 indexed bucketId, address gca, uint256 slashNonce, uint256 totalNewGCC, uint256 totalGlwRewardsWeight, uint256 totalGRCRewardsWeight, bytes32 root, bytes extraData)
CompensationPlanSubmitted
event CompensationPlanSubmitted(address indexed agent, uint32[5] plan)
EIP712DomainChanged
event EIP712DomainChanged()
GCAPayoutClaimed
event GCAPayoutClaimed(address indexed agent, uint256 amount, uint256 totalSlashableBalance)
GCAsSlashed
event GCAsSlashed(address[] slashedGcas)
NewGCAsAppointed
event NewGCAsAppointed(address[] newGcas)
ProposalHashPushed
event ProposalHashPushed(bytes32 proposalHash)
ProposalHashUpdate
event ProposalHashUpdate(uint256 indexed index, bytes32 proposalHash)
RequirementsHashUpdated
event RequirementsHashUpdated(bytes32 requirementsHash)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyMintedToCarbonCreditAuction
error AlreadyMintedToCarbonCreditAuction()
BucketAlreadyDelayed
error BucketAlreadyDelayed()
BucketAlreadyFinalized
error BucketAlreadyFinalized()
BucketIndexOutOfBounds
error BucketIndexOutOfBounds()
BucketNotFinalized
error BucketNotFinalized()
BucketSubmissionEnded
error BucketSubmissionEnded()
BucketSubmissionNotOpen
error BucketSubmissionNotOpen()
CallerNotEarlyLiquidity
error CallerNotEarlyLiquidity()
CallerNotGCA
error CallerNotGCA()
CallerNotGCAAtIndex
error CallerNotGCAAtIndex()
CallerNotGovernance
error CallerNotGovernance()
CallerNotVetoCouncilMember
error CallerNotVetoCouncilMember()
CannotDelayBucketThatNeedsToUpdateSlashNonce
error CannotDelayBucketThatNeedsToUpdateSlashNonce()
CannotDelayEmptyBucket
error CannotDelayEmptyBucket()
CannotSetNonceToZero
error CannotSetNonceToZero()
CompensationPlanLengthMustBeGreaterThanZero
error CompensationPlanLengthMustBeGreaterThanZero()
ElectricityFutureAuctionBidMustBeGreaterThanMinimumBid
error ElectricityFutureAuctionBidMustBeGreaterThanMinimumBid()
ElectricityFuturesAuctionAuthorizationTooLong
error ElectricityFuturesAuctionAuthorizationTooLong()
ElectricityFuturesAuctionBidTooLow
error ElectricityFuturesAuctionBidTooLow()
ElectricityFuturesAuctionEnded
error ElectricityFuturesAuctionEnded()
ElectricityFuturesAuctionInvalidSignature
error ElectricityFuturesAuctionInvalidSignature()
ElectricityFuturesSignatureExpired
error ElectricityFuturesSignatureExpired()
EmptyRoot
error EmptyRoot()
FailedInnerCall
error FailedInnerCall()
GCCAlreadySet
error GCCAlreadySet()
GlowWeightGreaterThanTotalWeight
error GlowWeightGreaterThanTotalWeight()
GlowWeightOverflow
error GlowWeightOverflow()
HashesNotUpdated
error HashesNotUpdated()
IndexDoesNotMatchNextProposalIndex
error IndexDoesNotMatchNextProposalIndex()
InsufficientShares
error InsufficientShares()
InvalidGCAHash
error InvalidGCAHash()
InvalidProof
error InvalidProof()
InvalidRelaySignature
error InvalidRelaySignature()
InvalidShares
error InvalidShares()
InvalidShortString
error InvalidShortString()
InvalidUserIndex
error InvalidUserIndex()
NoBalanceToPayout
error NoBalanceToPayout()
NotGCA
error NotGCA()
NotUSDCToken
error NotUSDCToken()
ProposalAlreadyUpdated
error ProposalAlreadyUpdated()
ProposalHashDoesNotMatch
error ProposalHashDoesNotMatch()
ProposalHashesEmpty
error ProposalHashesEmpty()
ProposalHashesNotUpdated
error ProposalHashesNotUpdated()
ReportGCCMustBeLT200Billion
error ReportGCCMustBeLT200Billion()
ReportWeightMustBeLTUint64MaxDiv5
error ReportWeightMustBeLTUint64MaxDiv5()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SignatureDoesNotMatchUser
error SignatureDoesNotMatchUser()
SignerNotGCA
error SignerNotGCA()
SlashedAgentCannotClaimReward
error SlashedAgentCannotClaimReward()
StringTooLong
error StringTooLong(string str)
USDCWeightGreaterThanTotalWeight
error USDCWeightGreaterThanTotalWeight()
USDCWeightOverflow
error USDCWeightOverflow()
UserAlreadyClaimed
error UserAlreadyClaimed()
creation bytecode
0x61026060405260405162006736380380620067368339810160408190526200002791620005d3565b6040518060400160405280601181526020017011d0d048185b9908135a5b995c941bdbdb607a1b815250604051806040016040528060018152602001603160f81b8152508a8a8a8a838051600003156200012e57806040516020016200008e919062000737565b60408051601f198184030181529190528051602091820120600080805260059092527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc555b81518110156200012c57620000e88162000361565b60008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090206200012291600562000470565b50600101620000d3565b505b506001600160a01b03808416608052821660a0526200014d8462000399565b6080516001600160a01b0316630c204d446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b4919062000778565b60c05260005b8451811015620002345760c051600d6000878481518110620001e057620001e062000792565b6020908102919091018101516001600160a01b0316825281019190915260400160002080546001600160401b0319166001600160401b03929092169190911790556200022c81620007a8565b9050620001ba565b50600a8190556200026e60c0516000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55565b5062000282925084915060109050620003eb565b6101805262000293816011620003eb565b6101a052815160208084019190912061014052815190820120610160524661010052620003246101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b039485166101c0529184166101e05283166102205290821661020052166102405250620009ef92505050565b6200036b62000513565b620186a081836005811062000384576200038462000792565b63ffffffff9092166020929092020152919050565b8051620003ae90600990602084019062000531565b507fc86bfbc844c8f8c4486c221244f90a67ab5292bf2e62a4919b3352946d865e6a81604051620003e09190620007d0565b60405180910390a150565b60006020835110156200040b57620004038362000424565b90506200041e565b81620004188482620008ae565b5060ff90505b92915050565b600080829050601f815111156200045b578260405163305a27a960e01b81526004016200045291906200097a565b60405180910390fd5b80516200046882620009ca565b179392505050565b600183019183908215620005015791602002820160005b83821115620004cd57835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030262000487565b8015620004ff5782816101000a81549063ffffffff0219169055600401602081600301049283019260010302620004cd565b505b506200050f92915062000589565b5090565b6040518060a001604052806005906020820280368337509192915050565b82805482825590600052602060002090810192821562000501579160200282015b828111156200050157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000552565b5b808211156200050f57600081556001016200058a565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620005ce57600080fd5b919050565b60008060008060008060008060006101208a8c031215620005f357600080fd5b89516001600160401b03808211156200060b57600080fd5b818c0191508c601f8301126200062057600080fd5b815181811115620006355762000635620005a0565b8060051b604051601f19603f830116810181811085821117156200065d576200065d620005a0565b6040529182526020808301935084820101918f8311156200067d57600080fd5b6020850194505b82851015620006aa576200069885620005b6565b84526020948501949093019262000684565b809d505050505050620006c060208b01620005b6565b9750620006d060408b01620005b6565b965060608a01519550620006e760808b01620005b6565b9450620006f760a08b01620005b6565b93506200070760c08b01620005b6565b92506200071760e08b01620005b6565b9150620007286101008b01620005b6565b90509295985092959850929598565b815160009082906020808601845b838110156200076c5781516001600160a01b03168552938201939082019060010162000745565b50929695505050505050565b6000602082840312156200078b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201620007c957634e487b7160e01b600052601160045260246000fd5b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015620008135783516001600160a01b031683529284019291840191600101620007ec565b50909695505050505050565b600181811c908216806200083457607f821691505b6020821081036200085557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008a957600081815260208120601f850160051c81016020861015620008845750805b601f850160051c820191505b81811015620008a55782815560010162000890565b5050505b505050565b81516001600160401b03811115620008ca57620008ca620005a0565b620008e281620008db84546200081f565b846200085b565b602080601f8311600181146200091a5760008415620009015750858301515b600019600386901b1c1916600185901b178555620008a5565b600085815260208120601f198616915b828110156200094b578886015182559484019460019091019084016200092a565b50858210156200096a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620009a9578581018301518582016040015282016200098b565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620008555760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051615c0f62000b2760003960008181610af501526128df01526000818161087d0152818161203e01528181612216015281816122d701526123390152600081816109030152818161207b01528181612241015281816122b5015261236601526000611284015260008181610ac4015261255e015260006132500152600061322301526000612f8b01526000612f6301526000612ebe01526000612ee801526000612f120152600081816104040152818161166f015281816125bf015281816149da0152614a0d01526000818161042b01528181610f560152611d1c015260008181610640015281816121a30152818161295b0152612b070152615c0f6000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c806384b0196e116101f4578063ceafca9c1161011a578063eaea67a5116100ad578063faaba8491161007c578063faaba84914610b74578063fbeec81f14610b7c578063fc43c24414610b84578063fded299514610baf57600080fd5b8063eaea67a514610b32578063ec3cb60714610b45578063f22debdb14610b58578063f3a04e4314610b6157600080fd5b8063d808cf62116100e9578063d808cf6214610ae8578063dc847fbb14610af0578063e1ada6b614610b17578063e88a522714610b1f57600080fd5b8063ceafca9c14610a94578063ceb055f014610aa7578063d1573f9914610aaf578063d5ab568414610ac257600080fd5b80639774786111610192578063b799036c11610161578063b799036c14610a35578063bdf3a8f214610a58578063bf0fb8cd14610a6b578063c0f1b0d014610a7457600080fd5b8063977478611461094b578063a6ab5a54146109e3578063a9fb763c146109eb578063b744aaa514610a2257600080fd5b80638916d77a116101ce5780638916d77a146108e957806389a30271146108fe5780638b4baba014610925578063957364bf1461093857600080fd5b806384b0196e146108a8578063852be6ba146108c3578063863ce2fc146108d657600080fd5b806341cfa499116102e45780636078679c116102775780636ce47dae116102465780636ce47dae14610854578063762c57b01461086557806379193d291461087857806381e73e3d1461089f57600080fd5b80636078679c146107ee57806369ec95e91461080e5780636be655f31461082e5780636ca4b9a61461084157600080fd5b80634e429c6d116102b35780634e429c6d146106dc5780634f127aae146107c05780635c581afb146107c85780635ed19629146107db57600080fd5b806341cfa499146106625780634456f22914610675578063464eb6fb146106955780634b359fc8146106c957600080fd5b8063202f00571161035c5780632d02fb881161032b5780632d02fb88146105125780632f6885b2146105fb578063375060991461061b57806339b6eaf51461063b57600080fd5b8063202f0057146104c857806320756d53146104d0578063296e5407146104d85780632a0c7d18146104eb57600080fd5b80631462783411610398578063146278341461042657806314fef6141461047257806316727a201461048557806316dfc9d3146104b357600080fd5b806302a8567f146103bf57806302e9660f146103e75780630c204d44146103ff575b600080fd5b6103d26103cd366004614e63565b610bcf565b60405190151581526020015b60405180910390f35b6103f1620186a081565b6040519081526020016103de565b6103f17f000000000000000000000000000000000000000000000000000000000000000081565b61044d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103de565b6103f1610480366004614e7e565b610c61565b610498610493366004614eef565b610c76565b604080519384526020840192909252908201526060016103de565b6104c66104c1366004614f51565b610ecd565b005b6103f160d081565b6104c6610f34565b6104c66104e6366004614f78565b610f3e565b6103f17f5c1edfbd8d37c567a5ff069ded6de286a7c1eb363cb354e0177a53c24fab88e981565b6105b8610520366004614e63565b60408051606080820183526000808352602080840182905292840181905273ffffffffffffffffffffffffffffffffffffffff949094168452600d825292829020825193840183525467ffffffffffffffff8082168552680100000000000000008204169184019190915270010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169082015290565b60408051825167ffffffffffffffff908116825260208085015190911690820152918101516fffffffffffffffffffffffffffffffff16908201526060016103de565b61060e610609366004614fa8565b61102a565b6040516103de9190614fca565b61062e610629366004614f51565b6110a8565b6040516103de9190615001565b61044d7f000000000000000000000000000000000000000000000000000000000000000081565b6104c6610670366004614f51565b61121f565b6103f1610683366004614e63565b60066020526000908152604090205481565b6106a86106a3366004614f51565b6114cf565b6040516fffffffffffffffffffffffffffffffff90911681526020016103de565b6104c66106d73660046151b6565b6114fd565b61077a6106ea366004614f51565b604080516060808201835260008083526020808401829052928401819052938452600f82529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820481169285019290925278010000000000000000000000000000000000000000000000009004169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff9081169183019190915292820151909216908201526060016103de565b6103f1611664565b6104c66107d6366004615258565b6116a3565b6103f16107e9366004615293565b611722565b6103f16107fc366004614f51565b600c6020526000908152604090205481565b6103f161081c366004614f51565b60009081526005602052604090205490565b6104c661083c3660046152e0565b6117f6565b6103d261084f366004614f51565b6118c2565b6103f169250ec4ddca432f60000081565b6103d261087336600461530e565b611900565b61044d7f000000000000000000000000000000000000000000000000000000000000000081565b6103f1600b5481565b6108b061196b565b6040516103de97969594939291906153a6565b6106a86108d1366004614f51565b6119cd565b6103f16108e4366004614f51565b6119df565b6108f1611a00565b6040516103de9190615465565b61044d7f000000000000000000000000000000000000000000000000000000000000000081565b6103d2610933366004614f51565b611a6f565b6104c66109463660046154bf565b611aac565b6109b26040805160608101825260008082526020820181905291810191909152506040805160608101825260125465ffffffffffff808216835266010000000000008204811660208401526c01000000000000000000000000909104169181019190915290565b60408051825165ffffffffffff908116825260208085015182169083015292820151909216908201526060016103de565b6103f1611cb1565b6109fe6109f9366004614f51565b611ccb565b604080518251151581526020808401519082015291810151908201526060016103de565b6104c6610a30366004614f51565b611d04565b6103d2610a43366004614e63565b60046020526000908152604090205460ff1681565b61044d610a66366004614f51565b611da6565b6103f160075481565b610a87610a82366004614fa8565b611ddd565b6040516103de9190615533565b6104c6610aa236600461556b565b611eac565b6103f1601081565b6104c6610abd366004614f51565b6121d9565b7f000000000000000000000000000000000000000000000000000000000000000061044d565b610a876123e6565b61044d7f000000000000000000000000000000000000000000000000000000000000000081565b6103f161243d565b6103f1610b2d366004615623565b612449565b6104c6610b40366004614f51565b612546565b6106a8610b53366004614f51565b6125b8565b6103f1600a5481565b6104c6610b6f366004615656565b6125f5565b6103f1612653565b6000546103f1565b6103f1610b9236600461530e565b600360209081526000928352604080842090915290825290205481565b6103f1610bbd366004614f51565b60009081526002602052604090205490565b6000610bd9612663565b15610be657506000919050565b60095460005b81811015610c57578373ffffffffffffffffffffffffffffffffffffffff1660098281548110610c1e57610c1e6156f9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603610c4f575060019392505050565b600101610bec565b5060009392505050565b6000610c6d8383612691565b90505b92915050565b600080600060056000888152602001908152602001600020548686604051602001610ca2929190615728565b6040516020818303038152906040528051906020012014610ce657610ce67f188d7f4f000000000000000000000000000000000000000000000000000000006126f6565b858585818110610cf857610cf86156f9565b9050602002016020810190610d0d9190614e63565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610d6857610d687f80c61bee000000000000000000000000000000000000000000000000000000006126f6565b600085815b81811015610dc95760008a815260016020908152604080832084845290915290208760058110610d9f57610d9f6156f9565b60088104919091015460079091166004026101000a900463ffffffff169290920191600101610d6d565b5073ffffffffffffffffffffffffffffffffffffffff8a1660009081526003602090815260408083208c845282528083205460029283905290832054909550919081610e168d60016157a4565b815260200190815260200160002054905080600003610e36575042610e43565b610e408142612700565b90505b6000610e4f83836157b7565b9050600082421115610e6857610e6583426157b7565b90505b6000610e77620186a0876157ca565b9050600081610e9362093a8069021e19e0c9bab2400000615810565b610e9d908a6157ca565b610ea79190615810565b9050610eb58185858c612716565b909b5099505050505050505050955095509592505050565b610ed6816118c2565b610f0357610f037f6970aec5000000000000000000000000000000000000000000000000000000006126f6565b6000818152600f60205260409020546fffffffffffffffffffffffffffffffff8116610f2f8382612858565b505050565b610f3c612959565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610fa457610fa47ff2be30fb000000000000000000000000000000000000000000000000000000006126f6565b8015610fbe57600b60008154610fb990615824565b909155505b600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018290556040518281527f32d46221037a44f535abe31e1ff331e89774176d88c51555858860de1b3ea8ed9060200160405180910390a15050565b611032614c62565b6000838152600160209081526040808320858452909152808220815160a08101928390529290916005918390855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161106057509498975050505050505050565b60408051608081018252600080825260208201819052918101919091526060808201526000828152600e602090815260408083208151608081018352815467ffffffffffffffff8082168352680100000000000000008204168286015270010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681840152600182018054845181870281018701909552808552919592946060870194939192919084015b828210156112115760008481526020908190206040805160a0810182526003860290920180546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820481168587015278010000000000000000000000000000000000000000000000009091041691830191909152600180820154606084015260029091015473ffffffffffffffffffffffffffffffffffffffff1660808301529083529092019101611155565b505050915250909392505050565b611228816118c2565b15611256576112567f6e48d7c5000000000000000000000000000000000000000000000000000000006126f6565b6040517febd7dc520000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ebd7dc5290602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611304919061585c565b611331576113317f0622c329000000000000000000000000000000000000000000000000000000006126f6565b600b546000828152600e602052604090205468010000000000000000900467ffffffffffffffff1614611386576113867e9835dc000000000000000000000000000000000000000000000000000000006126f6565b600061139461010083615810565b905060006113a461010084615879565b6000838152601660205260409020549091506001821b808216156113eb576113eb7fb17724af000000000000000000000000000000000000000000000000000000006126f6565b60008481526016602090815260408083208585179055878352600e909152812060010154900361143e5761143e7f36350e48000000000000000000000000000000000000000000000000000000006126f6565b61144e611449612653565b6129ea565b6000868152600e60205260409020805460109061149290849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661588d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050505050565b6000610c7062093a806114e1846119cd565b6fffffffffffffffffffffffffffffffff1661144991906157a4565b73ffffffffffffffffffffffffffffffffffffffff871660009081526004602052604090205460ff1615611554576115547fe30d9137000000000000000000000000000000000000000000000000000000006126f6565b3373ffffffffffffffffffffffffffffffffffffffff8816146115ef5773ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080546115b39133918a91856115aa83615824565b91905055612449565b90506115c0888284612a49565b6115ed576115ed7fdb8ee110000000000000000000000000000000000000000000000000000000006126f6565b505b81156115fd576115fd612959565b60008061160d8989898989610c76565b9250509150818161161e91906157a4565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526003602090815260408083208c84529091529020556116598983612abb565b505050505050505050565b600062093a806116947f0000000000000000000000000000000000000000000000000000000000000000426157b7565b61169e9190615810565b905090565b6116b08585858585612b74565b600b546040805133815260208101929092528101859052606081018490526080810183905260a0810182905260e060c0820181905260009082015285907fdef331aeae963d347af7bb45891db802244d92009505b3a36b7deebb10649d58906101000160405180910390a25050505050565b600061172c612ea4565b604080517ff41a975a6c3366ca20e8791fc8eeef08894182a1a27af98c61b2db736d4a8f8e6020820152908101889052606081018790526080810186905260a0810185905283151560c082015260e001604051602081830303815290604052805190602001206040516020016117d49291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505b95945050505050565b6117fe612fdc565b600980549082828110611813576118136156f9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff163314611864576118647fcc3edcc4000000000000000000000000000000000000000000000000000000006126f6565b61186f838383613012565b3373ffffffffffffffffffffffffffffffffffffffff167f10da5f5ca10baaaa5cd4befed915baf7f16e2264ba296d8a08dc44ccb81a8e7c846040516118b591906158d1565b60405180910390a2505050565b6000818152600e602052604080822054600b54909182901c67ffffffffffffffff1690608083901c906118f68383836131b8565b9695505050505050565b600061190a612663565b1561191757506000610c70565b8273ffffffffffffffffffffffffffffffffffffffff1660098381548110611941576119416156f9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16149392505050565b60006060806000806000606061197f61321c565b611987613249565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b6000610c7062093a806114e1846125b8565b600881815481106119ef57600080fd5b600091825260209091200154905081565b60606009805480602002602001604051908101604052809291908181526020018280548015611a6557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a3a575b5050505050905090565b6000611a7d61010083615879565b6001901b60166000611a9161010086615810565b81526020019081526020016000205416600014159050919050565b6007546008546000819003611ae457611ae47f952b12c4000000000000000000000000000000000000000000000000000000006126f6565b60008787878787604051602001611aff95949392919061595b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090508615611b635783600c60006001600b54611b5191906157b7565b81526020810191909152604001600020555b8060088481548110611b7757611b776156f9565b906000526020600020015414611bb057611bb07f5506e58c000000000000000000000000000000000000000000000000000000006126f6565b611bec86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061327692505050565b611c2886868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061334892505050565b611c6488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061338b92505050565b611c6f8360016157a4565b60075560405181815283907f15e771d663817069047ef826f6b86649135d5d105f8dfccdef1872b6617e3efe9060200160405180910390a25050505050505050565b611cc862093a8069021e19e0c9bab2400000615810565b81565b611cf1604051806060016040528060001515815260200160008152602001600081525090565b6000611cfc8361343b565b509392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611d6a57611d6a7ff2be30fb000000000000000000000000000000000000000000000000000000006126f6565b600a8190556040518181527f6ca2c941ef026d16c7ed54fa47e147bb7142a633c5f6bc2c945cc0b4b5f83e0c906020015b60405180910390a150565b60098181548110611db657600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600854606090821115611df05760085491505b81831115611e0d5750604080516000815260208101909152610c70565b6000611e1984846157b7565b67ffffffffffffffff811115611e3157611e316150dc565b604051908082528060200260200182016040528015611e5a578160200160208202803683370190505b509050835b83811015611cfc5760088181548110611e7a57611e7a6156f9565b90600052602060002001548286830381518110611e9957611e996156f9565b6020908102919091010152600101611e5f565b3373ffffffffffffffffffffffffffffffffffffffff841614611f14576000611ed88a8a8a8887611722565b9050611ee5848284612a49565b611f1257611f127f48121c80000000000000000000000000000000000000000000000000000000006126f6565b505b611f1d896118c2565b611f4a57611f4a7f6970aec5000000000000000000000000000000000000000000000000000000006126f6565b8115611f5857611f58610f34565b6000611f648a866135cd565b9050611f74848a8a8a8a8661364b565b506000898152600f602052604090205460c081901c67ffffffffffffffff608083901c16611fa58c82848e8e6136e8565b611fc18c6fffffffffffffffffffffffffffffffff8516612858565b6000611fcd8d88612691565b9050611fd98d8261384d565b9050611fe68d888361389e565b506000611ff28d613903565b905061201f8b847f3bc195f700000000000000000000000000000000000000000000000000000000613982565b8261202a8c836157ca565b6120349190615810565b9050801561214a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634cc2cb67887f00000000000000000000000000000000000000000000000000000000000000006120a385613993565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015277ffffffffffffffffffffffffffffffffffffffffffffffff166044820152606401600060405180830381600087803b15801561213157600080fd5b505af1158015612145573d6000803e3d6000fd5b505050505b6121758c837f2ef0fd7f00000000000000000000000000000000000000000000000000000000613982565b60008261218c8e69250ec4ddca432f6000006157ca565b6121969190615810565b905080156121c9576121c97f000000000000000000000000000000000000000000000000000000000000000089836139f1565b5050505050505050505050505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561228a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae9190615995565b90506122fc7f0000000000000000000000000000000000000000000000000000000000000000337f000000000000000000000000000000000000000000000000000000000000000085613a72565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260009183917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156123ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d19190615995565b6123db91906157b7565b9050610f2f81613ab8565b60606008805480602002602001604051908101604052809291908181526020018280548015611a6557602002820191906000526020600020905b815481526020019060010190808311612420575050505050905090565b611cc8601060d06157b7565b600080612454613ebb565b604080517f5c1edfbd8d37c567a5ff069ded6de286a7c1eb363cb354e0177a53c24fab88e9602082015273ffffffffffffffffffffffffffffffffffffffff881691810191909152606081018690526080810185905260a001604051602081830303815290604052805190602001206040516020016125059291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209150505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146125ac576125ac7fdb8682d4000000000000000000000000000000000000000000000000000000006126f6565b6125b581613ab8565b50565b6000610c707f00000000000000000000000000000000000000000000000000000000000000006125eb62093a80856157ca565b61144991906157a4565b6126028787878787612b74565b867fdef331aeae963d347af7bb45891db802244d92009505b3a36b7deebb10649d5833600b548989898989896040516126429897969594939291906159ae565b60405180910390a250505050505050565b600061169e62093a80600d6157ca565b60085460009080820361267857600091505090565b600754811461268957600191505090565b600091505090565b60006014816126a261010086615810565b815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b8060005260046000fd5b600081831061270f5781610c6d565b5090919050565b6000808061272862093a8060646157ca565b61273286886157a4565b111561275d5761274662093a8060646157ca565b61275086886157a4565b61275a91906157b7565b90505b858111156127685750845b600061277482896157ca565b9050600061278283896157b7565b9050600061279462093a8060646157ca565b8a6127a08a60016157a4565b6127aa91906157ca565b6127b49190615810565b905060006127c662093a8060646157ca565b8b6127d18b8d6157a4565b6127db91906157ca565b6127e59190615810565b90508a8111156127f25750895b6000600261280083856157a4565b61280a90866157ca565b6128149190615810565b905060006128228d8d6157ca565b905061282e82876157a4565b985061283a89826157b7565b97506128468a8a6157b7565b98505050505050505094509492505050565b600061286661010084615810565b60008181526015602052604081205491925061288461010086615879565b90506001811b828116600003612951576000848152601560205260409081902093821793849055517f233233bb00000000000000000000000000000000000000000000000000000000815260048101879052602481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063233233bb90604401600060405180830381600087803b15801561293857600080fd5b505af115801561294c573d6000803e3d6000fd5b505050505b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632660bff36040518163ffffffff1660e01b81526004016020604051808303816000875af11580156129c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b59190615995565b60006fffffffffffffffffffffffffffffffff821115612a45576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044015b60405180910390fd5b5090565b6000806000612a588585613ec5565b5090925090506000816003811115612a7257612a72615a3e565b148015612aaa57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806118f657506118f6868686613f12565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f919061585c565b612b7c612fdc565b612b8533610bcf565b612bb257612bb27f06f29f91000000000000000000000000000000000000000000000000000000006126f6565b612bbd83838661405f565b6000858152600e60205260408120600181015481549192909170010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff16916801000000000000000090910467ffffffffffffffff1690612c1e8a6125b8565b6fffffffffffffffffffffffffffffffff16905080421015612c6357612c637f34b37818000000000000000000000000000000000000000000000000000000006126f6565b600b546000849003612d4b57612c7881614137565b86547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff91909116178655612cb581614137565b865467ffffffffffffffff9190911668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909116178655612d19612d028c6114cf565b6fffffffffffffffffffffffffffffffff166129ea565b86546fffffffffffffffffffffffffffffffff9182167001000000000000000000000000000000000291161786559150815b8554600090612d68908d9067ffffffffffffffff16868589614187565b9050804210612d9a57612d9a7f2d3ff6f8000000000000000000000000000000000000000000000000000000006126f6565b818414612e6657612daa82614137565b875467ffffffffffffffff9190911668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff90911617875584612df662093a8090565b612e0090836157a4565b1115612e4557612e1661144962093a80836157a4565b87546fffffffffffffffffffffffffffffffff9182167001000000000000000000000000000000000291161787555b8515612e66576000600188018190558c8152600f6020526040812081905595505b5050505060018301600090815260208120915080612e848385614241565b91509150612e968989898d86866142c8565b61294c85838b8b8b8b6143ad565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015612f0a57507f000000000000000000000000000000000000000000000000000000000000000046145b15612f3457507f000000000000000000000000000000000000000000000000000000000000000090565b61169e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b612fe4612663565b15610f3c57610f3c7fae474820000000000000000000000000000000000000000000000000000000006126f6565b6000805b8281101561306557848160058110613030576130306156f9565b6020020160208101906130439190615a6d565b6130539063ffffffff16836157a4565b915061305e81615824565b9050613016565b50620186a08114613099576130997f6edcc523000000000000000000000000000000000000000000000000000000006126f6565b60008054906130a98260016157a4565b60008381526002602052604090205490915042811015613189576130d062093a80426157a4565b60008381526002602090815260408083209390935585825260059052818120548482529181208290555b8681101561317c57878103613134576000848152600160209081526040808320848452909152902061312e908a6005614c80565b5061316c565b6000858152600160208181526040808420858552825280842088855292825280842085855290915290912061316a916005614d1e565b505b61317581615824565b90506130fa565b5050506000555050505050565b600083815260016020908152604080832089845290915290206131ae90886005614c80565b5050505050505050565b6000826000036131ca5750600061253f565b428311158285036131e55780156131e557600191505061253f565b828514613211576000858152600c6020526040902054841161321157801561321157600191505061253f565b506000949350505050565b606061169e7f000000000000000000000000000000000000000000000000000000000000000060106146fc565b606061169e7f000000000000000000000000000000000000000000000000000000000000000060116146fc565b600080548082526002602052604090912054428110156132a15761329982615824565b600081905591505b826040516020016132b29190615a88565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060008581526005845282812091909155600290925281204290555b835181101561334257613315816147a7565b60008481526001602090815260408083208584529091529020613339916005614d51565b50600101613303565b50505050565b805161335b906009906020840190614dab565b507fc86bfbc844c8f8c4486c221244f90a67ab5292bf2e62a4919b3352946d865e6a81604051611d9b9190615465565b60005b815181101561340b576134038282815181106133ac576133ac6156f9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60010161338e565b507fdcf1d5a213828c43e8f004a4200c7d7545151958b346e4ce81bb1c6bd46981ca81604051611d9b9190615465565b613461604051806060016040528060001515815260200160008152602001600081525090565b60008281526013602090815260408083208151606081018352815460ff1615158082526001830154948201949094526002909101549181019190915290806134a95750601084105b156134b8579360009350915050565b6040805160608101825260125465ffffffffffff8082168352660100000000000082048116602084018190526c0100000000000000000000000090920416928201929092529085111561351057509360009350915050565b604082015160006135226001886157b7565b604084015190915065ffffffffffff165b8181116135be5760006013818461354981615ad4565b90825260208083019390935260409182016000208251606081018452815460ff161515815260018201549481019490945260020154918301829052945090915061359390856157a4565b8151909450156135b8578381602001516135ad91906157b7565b6020870152506135be565b50613533565b50929660019650945050505050565b600082600052600e60205260406000206001810190508054806001850111156135fe5763fdbe88766000526004601cfd5b5060009081526020812060016003949094029081018401549301929150819003610c7057610c707f53ce4ece000000000000000000000000000000000000000000000000000000006126f6565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b16602082015260348101869052605481018590526000906074016040516020818303038152906040528051906020012090506136b2848484846147da565b6136df576136df7f09bde339000000000000000000000000000000000000000000000000000000006126f6565b50505050505050565b60008581526017602090815260409182902082518084019093525467ffffffffffffffff808216845268010000000000000000909104169082015261372c83614137565b8151829061373b908390615b09565b67ffffffffffffffff1690525061375182614137565b816020018181516137629190615b09565b67ffffffffffffffff90811690915282511686101590506137a6576137a67ff5b9b3d2000000000000000000000000000000000000000000000000000000006126f6565b83816020015167ffffffffffffffff1611156137e5576137e57f260d3f37000000000000000000000000000000000000000000000000000000006126f6565b600095865260176020908152604090962081518154979092015167ffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009098169216919091179590951790945550505050565b60008061385c61010085615879565b90506001811b83811615613893576138937f82469919000000000000000000000000000000000000000000000000000000006126f6565b929092179392505050565b80601460006138af61010087615810565b815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60008060006139118461343b565b915091508015613977576001808352600060408085018281528783526013602090815291909220855181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169015151781559085015192810192909255516002909101555b506020015192915050565b81831115610f2f57610f2f816126f6565b600077ffffffffffffffffffffffffffffffffffffffffffffffff821115612a45576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260c0600482015260248101839052604401612a3c565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052610f2f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614814565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526133429186918216906323b872dd90608401613a2b565b6000613ac2611664565b90506000613ad16010836157a4565b90506000613ae1601060d06157b7565b613aeb90836157a4565b90506000613afb601060d06157b7565b613b059086615810565b604080516060808201835260125465ffffffffffff80821684526601000000000000820481166020808601919091526c01000000000000000000000000909204168385015260008881526013825284902084519283018552805460ff16158015845260018201549284019290925260020154938201939093529293509190613c055760008581526013602052604081206001018054859290613ba89084906157a4565b909155505060008481526013602052604081206002018054859290613bce9084906157a4565b909155505060405187815286907f22e18421e5684c329ae821a16451d5284686946fd78748c1e7a8e04f7d6f046890602001612642565b815160009065ffffffffffff1615613c2657825165ffffffffffff16613c28565b855b60008181526013602081815260408084208151606081018352815460ff1615158152600182015481850152600291820154818401528b86529390925283200180549394509092879290613c7c9084906157a4565b9091555050602084015160009065ffffffffffff16881180613c9d57508783145b9050600081613cb0578460400151613cb3565b60005b905081613cf857835b89811015613cf257600081815260136020526040902060020154613ce090836157a4565b9150613ceb81615824565b9050613cbc565b50613d00565b600060208401525b604051806060016040528060011515815260200182898660200151613d2591906157a4565b613d2f91906157b7565b8152600060209182018190528b815260138252604090819020835181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169015151781559183015160018301559190910151600290910155855165ffffffffffff168914613e745760405180606001604052808a65ffffffffffff1681526020016001601060d0613dc191906157b7565b613dcb908d6157a4565b613dd591906157b7565b65ffffffffffff90811682526040808a0151821660209384015283516012805494860151959092015183166c01000000000000000000000000027fffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff9584166601000000000000027fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909516919093161792909217929092169190911790555b897f22e18421e5684c329ae821a16451d5284686946fd78748c1e7a8e04f7d6f04688c604051613ea691815260200190565b60405180910390a25050505050505050505050565b600061169e612ea4565b60008060008351604103613eff5760208401516040850151606086015160001a613ef1888285856148aa565b955095509550505050613f0b565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff168585604051602401613f41929190615b2a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e0000000000000000000000000000000000000000000000000000000017905251613fc29190615b43565b600060405180830381855afa9150503d8060008114613ffd576040519150601f19603f3d011682016040523d82523d6000602084013e614002565b606091505b509150915081801561401657506020815110155b80156118f6575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906140549083016020908101908401615995565b149695505050505050565b614072600567ffffffffffffffff615b5f565b67ffffffffffffffff168311156140ac576140ac7ff2e36f93000000000000000000000000000000000000000000000000000000006126f6565b6140bf600567ffffffffffffffff615b5f565b67ffffffffffffffff168211156140f9576140f97ff2e36f93000000000000000000000000000000000000000000000000000000006126f6565b6c02863c1f5cdae42f9540000000811115610f2f57610f2f7f101dbe5e000000000000000000000000000000000000000000000000000000006126f6565b600067ffffffffffffffff821115612a4557604080517f6dfcc650000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604401612a3c565b6000816000036141b35761419a866119cd565b6fffffffffffffffffffffffffffffffff1690506117ed565b8285036141c35761419a866119cd565b8284036141d15750806117ed565b60006141dc876125b8565b6fffffffffffffffffffffffffffffffff169050845b84811015614236576000818152600c60205260409020546142149083866149a4565b1561422957614222816149be565b915061422e565b614236565b6001016141f2565b509695505050505050565b60008060005b838110156142bc5760028501546003909501943373ffffffffffffffffffffffffffffffffffffffff8216036142b357811561428357816142a5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b9350600386039550506142bc565b50600101614247565b508390505b9250929050565b6000838152600f602052604081208054916142f5896fffffffffffffffffffffffffffffffff85166157a4565b9050600061431189608086901c67ffffffffffffffff166157a4565b905060006143238960c087901c6157a4565b9050866000036143435760c01b60809190911b9190911717905550612951565b85546143616fffffffffffffffffffffffffffffffff8216856157b7565b935061437b608082901c67ffffffffffffffff16846157b7565b925061438b60c082901c836157b7565b915060c082901b608084901b8517179550858555505050505050505050505050565b8460000361453957856001016040518060a001604052806143cd876129ea565b6fffffffffffffffffffffffffffffffff1681526020016143ed86614137565b67ffffffffffffffff16815260200161440585614137565b67ffffffffffffffff9081168252602080830186905233604093840152845460018181018755600096875295829020855160039092020180549286015194860151841678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff95909416700100000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093166fffffffffffffffffffffffffffffffff909216919091179190911792909216178155606082015192810192909255608001516002909101805473ffffffffffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055612951565b6040518060a0016040528061454d866129ea565b6fffffffffffffffffffffffffffffffff16815260200161456d85614137565b67ffffffffffffffff16815260200161458584614137565b67ffffffffffffffff1681526020810183905233604090910152600187017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87146145d057866145d3565b60005b815481106145e3576145e36156f9565b600091825260209182902083516003929092020180549284015160408501516fffffffffffffffffffffffffffffffff9093167fffffffffffffffff0000000000000000000000000000000000000000000000009094169390931770010000000000000000000000000000000067ffffffffffffffff948516021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000939092169290920217815560608201516001820155608090910151600290910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055505050505050565b606060ff83146147165761470f83614a4f565b9050610c70565b81805461472290615b86565b80601f016020809104026020016040519081016040528092919081815260200182805461474e90615b86565b801561479b5780601f106147705761010080835404028352916020019161479b565b820191906000526020600020905b81548152906001019060200180831161477e57829003601f168201915b50505050509050610c70565b6147af614c62565b620186a08183600581106147c5576147c56156f9565b63ffffffff9092166020929092020152919050565b6000831561480c578360051b8501855b803580851160051b948552602094851852604060002093018181106147ea5750505b501492915050565b600061483673ffffffffffffffffffffffffffffffffffffffff841683614a8e565b9050805160001415801561485b575080806020019051810190614859919061585c565b155b15610f2f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401612a3c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156148e5575060009150600390508261499a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614939573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166149905750600092506001915082905061499a565b9250600091508190505b9450945094915050565b60008284101580156149b65750818411155b949350505050565b60008062093a806000848152600c60205260409020546149ff907f0000000000000000000000000000000000000000000000000000000000000000906157b7565b614a099190615810565b90507f000000000000000000000000000000000000000000000000000000000000000062093a80614a3b8360026157a4565b614a4591906157ca565b61253f91906157a4565b60606000614a5c83614a9c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6060610c6d83836000614add565b600060ff8216601f811115610c70576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015614b1b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612a3c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051614b449190615b43565b60006040518083038185875af1925050503d8060008114614b81576040519150601f19603f3d011682016040523d82523d6000602084013e614b86565b606091505b50915091506118f6868383606082614ba657614ba182614c20565b61253f565b8151158015614bca575073ffffffffffffffffffffffffffffffffffffffff84163b155b15614c19576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401612a3c565b508061253f565b805115614c305780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060a001604052806005906020820280368337509192915050565b600183019183908215614d125791602002820160005b83821115614ce057833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614c96565b8015614d105782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614ce0565b505b50612a45929150614e25565b600183019183908215614d1257916007016008900482015b82811115614d12578254825591600101919060010190614d36565b600183019183908215614d125791602002820160005b83821115614ce057835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614d67565b828054828255906000526020600020908101928215614d12579160200282015b82811115614d1257825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614dcb565b5b80821115612a455760008155600101614e26565b803573ffffffffffffffffffffffffffffffffffffffff81168114614e5e57600080fd5b919050565b600060208284031215614e7557600080fd5b610c6d82614e3a565b60008060408385031215614e9157600080fd5b82359150614ea160208401614e3a565b90509250929050565b60008083601f840112614ebc57600080fd5b50813567ffffffffffffffff811115614ed457600080fd5b6020830191508360208260051b85010111156142c157600080fd5b600080600080600060808688031215614f0757600080fd5b614f1086614e3a565b945060208601359350604086013567ffffffffffffffff811115614f3357600080fd5b614f3f88828901614eaa565b96999598509660600135949350505050565b600060208284031215614f6357600080fd5b5035919050565b80151581146125b557600080fd5b60008060408385031215614f8b57600080fd5b823591506020830135614f9d81614f6a565b809150509250929050565b60008060408385031215614fbb57600080fd5b50508035926020909101359150565b60a08101818360005b6005811015614ff857815163ffffffff16835260209283019290910190600101614fd3565b50505092915050565b6000602080835260a080840167ffffffffffffffff80875116848701528387015160408282168189015280890151915060606fffffffffffffffffffffffffffffffff808416828b0152818b01519350608080818c015286855180895260c08d0191508a87019850600096505b808710156150cb5788518051851683528b81015189168c84015286810151891687840152858101518684015283015173ffffffffffffffffffffffffffffffffffffffff1683830152978a0197600196909601959089019061506e565b509c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261511c57600080fd5b813567ffffffffffffffff80821115615137576151376150dc565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561517d5761517d6150dc565b8160405283815286602085880101111561519657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060c0888a0312156151d157600080fd5b6151da88614e3a565b965060208801359550604088013567ffffffffffffffff808211156151fe57600080fd5b61520a8b838c01614eaa565b909750955060608a0135945060808a0135915061522682614f6a565b90925060a0890135908082111561523c57600080fd5b506152498a828b0161510b565b91505092959891949750929550565b600080600080600060a0868803121561527057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600080600060a086880312156152ab57600080fd5b8535945060208601359350604086013592506060860135915060808601356152d281614f6a565b809150509295509295909350565b60008060c083850312156152f357600080fd5b60a083018481111561530457600080fd5b9294923593505050565b6000806040838503121561532157600080fd5b61532a83614e3a565b946020939093013593505050565b60005b8381101561535357818101518382015260200161533b565b50506000910152565b60008151808452615374816020860160208601615338565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e0818401526153e260e084018a61535c565b83810360408501526153f4818a61535c565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561545357835183529284019291840191600101615437565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156154b357835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101615481565b50909695505050505050565b6000806000806000606086880312156154d757600080fd5b853567ffffffffffffffff808211156154ef57600080fd5b6154fb89838a01614eaa565b9097509550602088013591508082111561551457600080fd5b5061552188828901614eaa565b96999598509660400135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156154b35783518352928401929184019160010161554f565b60008060008060008060008060006101008a8c03121561558a57600080fd5b8935985060208a0135975060408a0135965060608a013567ffffffffffffffff808211156155b757600080fd5b6155c38d838e01614eaa565b909850965060808c013595508691506155de60a08d01614e3a565b945060c08c013591506155f082614f6a565b90925060e08b0135908082111561560657600080fd5b506156138c828d0161510b565b9150509295985092959850929598565b60008060006060848603121561563857600080fd5b61564184614e3a565b95602085013595506040909401359392505050565b600080600080600080600060c0888a03121561567157600080fd5b873596506020880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff808211156156ac57600080fd5b818a0191508a601f8301126156c057600080fd5b8135818111156156cf57600080fd5b8b60208285010111156156e157600080fd5b60208301945080935050505092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008184825b8581101561576a5773ffffffffffffffffffffffffffffffffffffffff61575483614e3a565b168352602092830192919091019060010161572e565b509095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610c7057610c70615775565b81810381811115610c7057610c70615775565b8082028115828204841417610c7057610c70615775565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261581f5761581f6157e1565b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361585557615855615775565b5060010190565b60006020828403121561586e57600080fd5b815161253f81614f6a565b600082615888576158886157e1565b500690565b6fffffffffffffffffffffffffffffffff8181168382160190808211156158b6576158b6615775565b5092915050565b803563ffffffff81168114614e5e57600080fd5b60a08101818360005b6005811015614ff85763ffffffff6158f1836158bd565b16835260209283019291909101906001016158da565b8183526000602080850194508260005b858110156159505773ffffffffffffffffffffffffffffffffffffffff61593d83614e3a565b1687529582019590820190600101615917565b509495945050505050565b60608152600061596f606083018789615907565b8281036020840152615982818688615907565b9150508260408301529695505050505050565b6000602082840312156159a757600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff891681528760208201528660408201528560608201528460808201528360a082015260e060c08201528160e082015260006101008385828501376000838501820152601f9093017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910190910198975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215615a7f57600080fd5b610c6d826158bd565b815160009082906020808601845b83811015615ac857815173ffffffffffffffffffffffffffffffffffffffff1685529382019390820190600101615a96565b50929695505050505050565b600081615ae357615ae3615775565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b67ffffffffffffffff8181168382160190808211156158b6576158b6615775565b8281526040602082015260006149b6604083018461535c565b60008251615b55818460208701615338565b9190910192915050565b600067ffffffffffffffff80841680615b7a57615b7a6157e1565b92169190910492915050565b600181811c90821680615b9a57607f821691505b602082108103615bd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea264697066735822122058406db283217e6387a19d52ee0a92fa72e283c73efdaddae995dc58ce3b184c64736f6c634300081500330000000000000000000000000000000000000000000000000000000000000120000000000000000000000000f4fbc617a5733eaaf9af08e1ab816b103388d8b60000000000000000000000008d01a258bc1adb728322499e5d84173ea971d665f5cb16305601517126308ab9ffddf32fafc7c2f01d62c39d72db95f312abd1af000000000000000000000000d5abe236d2f2f5d10231c054e078788ea3447dfc000000000000000000000000e010ec500720be9ef3f82129e7ed2ee1fb7955f2000000000000000000000000a3a32d3c9a5a593bc35d69bacbe2df5ea2c3cf5c000000000000000000000000d5970622b740a2ea5a5574616c193968b10e129700000000000000000000000021c46173591f39afc1d2b634b74c98f0576a272b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b6d80f51943a9f14e584013f3201436e319ed5f2