From b698a3fc24884bf1dfe48c82c26340e005eee0e8 Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Thu, 6 Jul 2023 17:56:13 -0400 Subject: [PATCH] add handleLog test; change block.number --> _blockNum() (#9746) --- .../dev/automation/2_1/KeeperRegistry2_1.sol | 4 +- .../v0.8/automation/KeeperRegistry2_1.test.ts | 43 +++++++++++++++++-- .../keeper_registry_wrapper_2_1.go | 2 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol b/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol index d85a4b35e62..a528621b0e6 100644 --- a/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol +++ b/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol @@ -446,7 +446,7 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER } if ( (trigger.blockHash != bytes32("") && _blockHash(trigger.blockNum) != trigger.blockHash) || - trigger.blockNum >= block.number + trigger.blockNum >= _blockNum() ) { // There are two cases of reorged report // 1. trigger block number is in future: this is an edge case during extreme deep reorgs of chain @@ -464,7 +464,7 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER LogTrigger memory trigger = abi.decode(rawTrigger, (LogTrigger)); if ( (trigger.blockHash != bytes32("") && _blockHash(trigger.blockNum) != trigger.blockHash) || - trigger.blockNum >= block.number + trigger.blockNum >= _blockNum() ) { // Reorg protection is same as conditional trigger upkeeps emit ReorgedUpkeepReport(upkeepId, rawTrigger); diff --git a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts index c3a61e97f8a..282fc86be74 100644 --- a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts +++ b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts @@ -21,6 +21,7 @@ import { UpkeepAutoFunder__factory as UpkeepAutoFunderFactory } from '../../../t import { UpkeepTranscoder__factory as UpkeepTranscoderFactory } from '../../../typechain/factories/UpkeepTranscoder__factory' import { MockArbGasInfo__factory as MockArbGasInfoFactory } from '../../../typechain/factories/MockArbGasInfo__factory' import { MockOVMGasPriceOracle__factory as MockOVMGasPriceOracleFactory } from '../../../typechain/factories/MockOVMGasPriceOracle__factory' +import { ILogAutomation__factory as ILogAutomationactory } from '../../../typechain/factories/ILogAutomation__factory' import { MockArbSys__factory as MockArbSysFactory } from '../../../typechain/factories/MockArbSys__factory' import { AutomationUtils2_1 as AutomationUtils } from '../../../typechain/AutomationUtils2_1' import { MercuryUpkeep } from '../../../typechain/MercuryUpkeep' @@ -39,6 +40,10 @@ import { InsufficientFundsUpkeepReportEvent, CancelledUpkeepReportEvent, } from '../../../typechain/IKeeperRegistryMaster' +import { + deployMockContract, + MockContract, +} from '@ethereum-waffle/mock-contract' import { deployRegistry21 } from './helpers' const describeMaybe = process.env.SKIP_SLOW ? describe.skip : describe @@ -76,6 +81,7 @@ type Report = Parameters[0] type OnChainConfig = Parameters[0] type LogTrigger = Parameters[0] type ConditionalTrigger = Parameters[0] +type Log = Parameters[0] // ----------------------------------------------------------------------------------------------- // These are the gas overheads that off chain systems should provide to check upkeep / transmit @@ -153,7 +159,7 @@ let mgRegistry: IKeeperRegistry // "migrate registry" used in migration tests let blankRegistry: IKeeperRegistry // used to test initial configurations let mock: UpkeepMock let autoFunderUpkeep: UpkeepAutoFunder -let ltUpkeep: UpkeepMock +let ltUpkeep: MockContract let transcoder: UpkeepTranscoder let mockArbGasInfo: MockArbGasInfo let mockOVMGasPriceOracle: MockOVMGasPriceOracle @@ -219,6 +225,12 @@ const encodeLogTrigger = (logTrigger: LogTrigger) => { ) } +const encodeLog = (log: Log) => { + return ( + '0x' + automationUtils.interface.encodeFunctionData('_log', [log]).slice(10) + ) +} + const encodeReport = (report: Report) => { return ( '0x' + @@ -968,7 +980,7 @@ describe('KeeperRegistry2_1', () => { ) afUpkeepId = await getUpkeepID(tx) - ltUpkeep = await upkeepMockFactory.deploy() + ltUpkeep = await deployMockContract(owner, ILogAutomationactory.abi) tx = await registry .connect(owner) ['registerUpkeep(address,uint32,address,uint8,bytes,bytes,bytes)']( @@ -3032,8 +3044,9 @@ describe('KeeperRegistry2_1', () => { context('when the registration is funded', () => { beforeEach(async () => { - await linkToken.connect(admin).approve(registry.address, toWei('100')) + await linkToken.connect(admin).approve(registry.address, toWei('200')) await registry.connect(admin).addFunds(upkeepId, toWei('100')) + await registry.connect(admin).addFunds(logUpkeepId, toWei('100')) }) it('returns false, error code, and revert data if the target check reverts', async () => { @@ -3145,6 +3158,30 @@ describe('KeeperRegistry2_1', () => { assert.isTrue(checkUpkeepResult.linkNative.eq(linkEth)) }) + it('calls checkLog for log-trigger upkeeps', async () => { + const log: Log = { + index: 0, + txIndex: 0, + txHash: ethers.utils.randomBytes(32), + blockNumber: 100, + blockHash: ethers.utils.randomBytes(32), + source: randomAddress(), + topics: [ethers.utils.randomBytes(32), ethers.utils.randomBytes(32)], + data: ethers.utils.randomBytes(1000), + } + + await ltUpkeep.mock.checkLog.withArgs(log).returns(true, '0x1234') + + const checkData = encodeLog(log) + + const checkUpkeepResult = await registry + .connect(zeroAddress) + .callStatic['checkUpkeep(uint256,bytes)'](logUpkeepId, checkData) + + expect(checkUpkeepResult.upkeepNeeded).to.be.true + expect(checkUpkeepResult.performData).to.equal('0x1234') + }) + itMaybe( 'has a large enough gas overhead to cover upkeeps that use all their gas [ @skip-coverage ]', async () => { diff --git a/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go b/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go index aff67c70629..f5ea10582f1 100644 --- a/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go +++ b/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go @@ -32,7 +32,7 @@ var ( var KeeperRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractKeeperRegistryLogicA2_1\",\"name\":\"logicA\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"executeGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Mode\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Trigger\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfigBytes\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"simulatePerformUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"rawReport\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162004f3638038062004f36833981016040819052620000359162000374565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200039b565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000100919062000374565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000165919062000374565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca919062000374565b3380600081620002215760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b038481169190911790915581161562000254576200025481620002b0565b5050508360028111156200026c576200026c620003be565b60e0816002811115620002835762000283620003be565b9052506001600160a01b0392831660805290821660a052811660c052919091166101005250620003d49050565b336001600160a01b038216036200030a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000218565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200037157600080fd5b50565b6000602082840312156200038757600080fd5b815162000394816200035b565b9392505050565b600060208284031215620003ae57600080fd5b8151600381106200039457600080fd5b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e05161010051614af36200044360003960008181610102015261019b0152600081816101e201528181612dc201528181613122015281816132b501526138c901526000610230015260006103770152600081816103b001526105bf0152614af36000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a4c0ed3611610097578063b1dc65a411610066578063b1dc65a41461039b578063ca30e603146103ae578063e3d0e712146103d4578063f2fde38b146103e757610100565b8063a4c0ed36146102ef578063aed2e92914610302578063afcb95d71461032c578063b10b673c1461037557610100565b80636709d0e5116100d35780636709d0e51461022e57806379ba50971461025457806381ff70481461025c5780638da5cb5b146102d157610100565b8063181f5a7714610147578063349e8cca146101995780634b4fd03b146101e05780635147cd591461020e575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610140573d6000f35b3d6000fd5b005b6101836040518060400160405280601481526020017f4b6565706572526567697374727920322e312e3000000000000000000000000081525081565b6040516101909190613b48565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b7f00000000000000000000000000000000000000000000000000000000000000006040516101909190613b8a565b61022161021c366004613ba4565b6103fa565b6040516101909190613bbd565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456104a5565b6102ae60145460115463ffffffff780100000000000000000000000000000000000000000000000083048116937c01000000000000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610190565b60005473ffffffffffffffffffffffffffffffffffffffff166101bb565b6101456102fd366004613c3c565b6105a7565b610315610310366004613c98565b6107c3565b604080519215158352602083019190915201610190565b601154601254604080516000815260208101939093527c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690820152606001610190565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103a9366004613d29565b610939565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103e2366004613ffa565b6114b1565b6101456103f53660046140c7565b612290565b6000818160045b600f811015610487577fff00000000000000000000000000000000000000000000000000000000000000821683826020811061043f5761043f6140e4565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461047557506000949350505050565b8061047f81614142565b915050610401565b5081600f1a600181111561049d5761049d613b5b565b949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461052b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610616576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208114610650576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065e82840184613ba4565b60008181526004602052604090205490915065010000000000900463ffffffff908116146106b8576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600101546106f39085906c0100000000000000000000000090046bffffffffffffffffffffffff1661417a565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff90921691909117905560185461075e90859061419f565b6018556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b6000806107ce6122a4565b6012546e010000000000000000000000000000900460ff161561081d576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526004602090815260409182902082516101008082018552825460ff81161515835263ffffffff918104821683860181905265010000000000820483168488015273ffffffffffffffffffffffffffffffffffffffff690100000000000000000090920482166060850181905260018601546bffffffffffffffffffffffff80821660808801526c0100000000000000000000000082041660a08701527801000000000000000000000000000000000000000000000000900490931660c08501526002909401541660e08301528451601f8901859004850281018501909552878552909361092c9391929189908990819084018382808284376000920191909152506122de92505050565b9097909650945050505050565b60005a604080516101208101825260125460ff808216835261010080830463ffffffff90811660208601526501000000000084048116958501959095526901000000000000000000830462ffffff1660608501526c01000000000000000000000000830461ffff1660808501526e0100000000000000000000000000008304821615801560a08601526f010000000000000000000000000000008404909216151560c085015270010000000000000000000000000000000083046bffffffffffffffffffffffff1660e08501527c010000000000000000000000000000000000000000000000000000000090920490931690820152919250610a67576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff16610ab0576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6011548a3514610aec576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610af99060016141b2565b60ff1686141580610b0a5750858414155b15610b41576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b518a8a8a8a8a8a8a8a6124e0565b6000610b5d8a8a612749565b9050600081604001515167ffffffffffffffff811115610b7f57610b7f613de0565b604051908082528060200260200182016040528015610c4357816020015b604080516101e081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610b9d5790505b5090506000805b8360400151518110156110c1576004600085604001518381518110610c7157610c716140e4565b602090810291909101810151825281810192909252604090810160002081516101008082018452825460ff81161515835263ffffffff91810482169583019590955265010000000000850481169382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009094048416606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490921660c08301526002015490911660e08201528351849083908110610d6357610d636140e4565b602002602001015160000181905250610d9884604001518281518110610d8b57610d8b6140e4565b60200260200101516103fa565b838281518110610daa57610daa6140e4565b6020026020010151608001906001811115610dc757610dc7613b5b565b90816001811115610dda57610dda613b5b565b81525050610e5285848381518110610df457610df46140e4565b602002602001015160800151858481518110610e1257610e126140e4565b602002602001015160000151602001518760a001518581518110610e3857610e386140e4565b602002602001015151886000015189602001516001612804565b838281518110610e6457610e646140e4565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050610f3084604001518281518110610eab57610eab6140e4565b6020026020010151848381518110610ec557610ec56140e4565b60200260200101516080015186608001518481518110610ee757610ee76140e4565b6020026020010151868581518110610f0157610f016140e4565b602002602001015160000151878681518110610f1f57610f1f6140e4565b60200260200101516040015161284f565b838281518110610f4257610f426140e4565b60200260200101516020019015159081151581525050828181518110610f6a57610f6a6140e4565b60200260200101516020015115610f8d57610f866001836141cb565b9150610f92565b6110af565b610ff8838281518110610fa757610fa76140e4565b6020026020010151600001516060015185606001518381518110610fcd57610fcd6140e4565b60200260200101518660a001518481518110610feb57610feb6140e4565b60200260200101516122de565b84838151811061100a5761100a6140e4565b6020026020010151606001858481518110611027576110276140e4565b602002602001015160a0018281525082151515158152505050828181518110611052576110526140e4565b602002602001015160a001518661106991906141e6565b95506110af84604001518281518110611084576110846140e4565b602002602001015184838151811061109e5761109e6140e4565b602002602001015160800151612997565b806110b981614142565b915050610c4a565b508061ffff166000036110d85750505050506114a7565b83516110e59060016141b2565b6110f49060ff1661044c6141f9565b616b6c6111028d60106141f9565b5a61110d90896141e6565b611117919061419f565b611121919061419f565b61112b919061419f565b9450611b5861113e61ffff831687614265565b611148919061419f565b945060008060008060005b87604001515181101561134957868181518110611172576111726140e4565b60200260200101516020015115611337576111ce8a888381518110611199576111996140e4565b6020026020010151608001518a60a0015184815181106111bb576111bb6140e4565b6020026020010151518c60000151612a1e565b8782815181106111e0576111e06140e4565b602002602001015160c001818152505061123c898960400151838151811061120a5761120a6140e4565b6020026020010151898481518110611224576112246140e4565b60200260200101518b600001518c602001518b612a3e565b909350915061124b828561417a565b9350611257838661417a565b945086818151811061126b5761126b6140e4565b60200260200101516060015115158860400151828151811061128f5761128f6140e4565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b84866112c4919061417a565b8a85815181106112d6576112d66140e4565b602002602001015160a001518b86815181106112f4576112f46140e4565b602002602001015160c001518d608001518781518110611316576113166140e4565b602002602001015160405161132e9493929190614279565b60405180910390a35b8061134181614142565b915050611153565b5050336000908152600b6020526040902080548492506002906113819084906201000090046bffffffffffffffffffffffff1661417a565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080601260000160108282829054906101000a90046bffffffffffffffffffffffff166113db919061417a565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060008f60016003811061141e5761141e6140e4565b602002013560001c9050600060088264ffffffffff16901c905087610100015163ffffffff168163ffffffff16111561149d57601280547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416021790555b5050505050505050505b5050505050505050565b6114b9612b31565b601f865111156114f5576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360ff16600003611532576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451865114158061155157506115498460036142b6565b60ff16865111155b15611588576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e547001000000000000000000000000000000009091046bffffffffffffffffffffffff169060005b816bffffffffffffffffffffffff1681101561161d5761160a600e82815481106115e1576115e16140e4565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168484612bb2565b508061161581614142565b9150506115b5565b5060008060005b836bffffffffffffffffffffffff1681101561172657600d818154811061164d5761164d6140e4565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff90921694509082908110611688576116886140e4565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591508061171e81614142565b915050611624565b50611733600d6000613a1d565b61173f600e6000613a1d565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c51811015611ac357600c60008e8381518110611784576117846140e4565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff16156117ef576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c60008f8481518110611820576118206140e4565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c90829081106118c8576118c86140e4565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600b83526040908190208151608081018352905460ff80821615801584526101008304909116958301959095526bffffffffffffffffffffffff6201000082048116938301939093526e010000000000000000000000000000900490911660608201529450925061198d576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff87166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009095169490941717919091169290921791909117905580611abb81614142565b915050611765565b50508a51611ad99150600d9060208d0190613a3b565b508851611aed90600e9060208c0190613a3b565b50600087806020019051810190611b0491906143a3565b90506040518061012001604052808a60ff168152602001826000015163ffffffff168152602001826020015163ffffffff168152602001826060015162ffffff168152602001826080015161ffff1681526020016012600001600e9054906101000a900460ff16151581526020016012600001600f9054906101000a900460ff1615158152602001866bffffffffffffffffffffffff168152602001600063ffffffff16815250601260008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160096101000a81548162ffffff021916908362ffffff160217905550608082015181600001600c6101000a81548161ffff021916908361ffff16021790555060a082015181600001600e6101000a81548160ff02191690831515021790555060c082015181600001600f6101000a81548160ff02191690831515021790555060e08201518160000160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061010082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050506040518061018001604052808260a001516bffffffffffffffffffffffff16815260200182610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601360010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001826040015163ffffffff1681526020018260c0015163ffffffff168152602001601360010160149054906101000a900463ffffffff1663ffffffff168152602001601360010160189054906101000a900463ffffffff1663ffffffff1681526020016013600101601c9054906101000a900463ffffffff1663ffffffff1681526020018260e0015163ffffffff16815260200182610100015163ffffffff16815260200182610120015163ffffffff168152602001826101c0015173ffffffffffffffffffffffffffffffffffffffff16815250601360008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555061016082015181600201600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505080610140015160168190555080610160015160178190555060006013600101601c9054906101000a900463ffffffff1690506120c7612dbc565b601480547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff938416021780825560019260189161214291859178010000000000000000000000000000000000000000000000009004166144fd565b92506101000a81548163ffffffff021916908363ffffffff16021790555061218c4630601360010160189054906101000a900463ffffffff1663ffffffff168f8f8f8f8f8f612e71565b60115560005b61219c6009612f1b565b8110156121cc576121b96121b1600983612f25565b600990612f31565b50806121c481614142565b915050612192565b5060005b826101a001515181101561222357612210836101a0015182815181106121f8576121f86140e4565b60200260200101516009612f5390919063ffffffff16565b508061221b81614142565b9150506121d0565b507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581601154601360010160189054906101000a900463ffffffff168f8f8f8f8f8f60405161227a9998979695949392919061456b565b60405180910390a1505050505050505050505050565b612298612b31565b6122a181612f75565b50565b32156122dc576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60125460009081906f01000000000000000000000000000000900460ff1615612333576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f010000000000000000000000000000001790555a9050634585e33b60e01b836040516024016123899190613b48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d169061245c9087908790600401614601565b6020604051808303816000875af115801561247b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249f919061461a565b91505a6124ac90826141e6565b9050601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1690559094909350915050565b600087876040516124f292919061463c565b604051908190038120612509918b9060200161464c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b888110156126e057600185878360208110612575576125756140e4565b61258291901a601b6141b2565b8c8c85818110612594576125946140e4565b905060200201358b8b868181106125ad576125ad6140e4565b90506020020135604051600081526020016040526040516125ea949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561260c573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506126ba576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b8401935080806126d890614142565b915050612558565b50827e0101010101010101010101010101010101010101010101010101010101010184161461273b576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b6127826040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b60006127908385018561473d565b60408101515160608201515191925090811415806127b357508082608001515114155b806127c35750808260a001515114155b156127fa576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5090505b92915050565b60008061281688878b6000015161306a565b90506000806128318b8a63ffffffff16858a8a60018b6130ed565b9092509050612840818361417a565b9b9a5050505050505050505050565b60008085600181111561286457612864613b5b565b0361288557612874868585613498565b6128805750600061298e565b6128da565b600185600181111561289957612899613b5b565b036128a857612874868561358b565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128e2612dbc565b836040015163ffffffff161161293257857fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd5636856040516129229190613b48565b60405180910390a250600061298e565b816bffffffffffffffffffffffff168360a001516bffffffffffffffffffffffff16101561298a57857f377c8b0c126ae5248d27aca1c76fac4608aff85673ee3caf09747e1044549e02856040516129229190613b48565b5060015b95945050505050565b60008160018111156129ab576129ab613b5b565b03612a1a576129b8612dbc565b6000838152600460205260409020600101805463ffffffff929092167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790555b5050565b6000612a2b84848461306a565b90508085101561049d5750929392505050565b600080612a59888760a001518860c0015188888860016130ed565b90925090506000612a6a828461417a565b600089815260046020526040902060010180549192508291600c90612aae9084906c0100000000000000000000000090046bffffffffffffffffffffffff1661482a565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a815260046020526040812060010180548594509092612af79185911661417a565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146122dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610522565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015290612dae576000816060015185612c4a919061482a565b90506000612c58858361484f565b90508083604001818151612c6c919061417a565b6bffffffffffffffffffffffff16905250612c87858261487a565b83606001818151612c98919061417a565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b6040015190505b9392505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115612df257612df2613b5b565b03612e6c57606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6791906148ae565b905090565b504390565b6000808a8a8a8a8a8a8a8a8a604051602001612e95999897969594939291906148c7565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b60006127fe825490565b6000612db58383613750565b6000612db58373ffffffffffffffffffffffffffffffffffffffff841661377a565b6000612db58373ffffffffffffffffffffffffffffffffffffffff8416613874565b3373ffffffffffffffffffffffffffffffffffffffff821603612ff4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610522565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000808085600181111561308057613080613b5b565b0361308f5750620138806130ae565b60018560018111156130a3576130a3613b5b565b036128a85750620186a05b6130bf63ffffffff851660146141f9565b6130ca8460016141b2565b6130d99060ff16611d4c6141f9565b6130e3908361419f565b61298e919061419f565b6000806000896080015161ffff168761310691906141f9565b90508380156131145750803a105b1561311c57503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561315257613152613b5b565b036132b15760408051600081526020810190915285156131b057600036604051806080016040528060488152602001614a9f6048913960405160200161319a9392919061495c565b6040516020818303038152906040529050613218565b6015546131cc90640100000000900463ffffffff166004614983565b63ffffffff1667ffffffffffffffff8111156131ea576131ea613de0565b6040519080825280601f01601f191660200182016040528015613214576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e90613268908490600401613b48565b602060405180830381865afa158015613285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a991906148ae565b91505061335d565b60017f000000000000000000000000000000000000000000000000000000000000000060028111156132e5576132e5613b5b565b0361335d57606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a91906148ae565b90505b8461337957808b6080015161ffff1661337691906141f9565b90505b61338761ffff871682614265565b9050600087826133978c8e61419f565b6133a190866141f9565b6133ab919061419f565b6133bd90670de0b6b3a76400006141f9565b6133c79190614265565b905060008c6040015163ffffffff1664e8d4a510006133e691906141f9565b898e6020015163ffffffff16858f886133ff91906141f9565b613409919061419f565b61341790633b9aca006141f9565b61342191906141f9565b61342b9190614265565b613435919061419f565b90506b033b2e3c9fd0803ce800000061344e828461419f565b1115613486576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b600080838060200190518101906134af91906149a6565b90508260c0015163ffffffff16816000015163ffffffff16101561350f57847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516134fd9190613b48565b60405180910390a26000915050612db5565b6020810151158015906135365750602081015181516135339063ffffffff166138c3565b14155b8061354b575043816000015163ffffffff1610155b1561358057847f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301856040516134fd9190613b48565b506001949350505050565b600080828060200190518101906135a291906149fd565b6060810151909150158015906135ce575080606001516135cb826040015163ffffffff166138c3565b14155b806135e3575043816040015163ffffffff1610155b1561362a57837f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301846040516136189190613b48565b60405180910390a260009150506127fe565b805160208083015160405160009361367c938993919201928352602083019190915260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016604082015260440190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600890935291205490915060ff161561370d57847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516136fa9190613b48565b60405180910390a26000925050506127fe565b600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505092915050565b6000826000018281548110613767576137676140e4565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561386357600061379e6001836141e6565b85549091506000906137b2906001906141e6565b90508181146138175760008660000182815481106137d2576137d26140e4565b90600052602060002001549050808760000184815481106137f5576137f56140e4565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061382857613828614a6f565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506127fe565b60009150506127fe565b5092915050565b60008181526001830160205260408120546138bb575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556127fe565b5060006127fe565b600060017f000000000000000000000000000000000000000000000000000000000000000060028111156138f9576138f9613b5b565b03613a13576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561394c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397091906148ae565b9050808310158061398b575061010061398984836141e6565b115b156139995750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a8290602401602060405180830381865afa1580156139ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db591906148ae565b504090565b919050565b50805460008255906000526020600020908101906122a19190613ac5565b828054828255906000526020600020908101928215613ab5579160200282015b82811115613ab557825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613a5b565b50613ac1929150613ac5565b5090565b5b80821115613ac15760008155600101613ac6565b60005b83811015613af5578181015183820152602001613add565b50506000910152565b60008151808452613b16816020860160208601613ada565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612db56020830184613afe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613b9e57613b9e613b5b565b91905290565b600060208284031215613bb657600080fd5b5035919050565b6020810160028310613b9e57613b9e613b5b565b73ffffffffffffffffffffffffffffffffffffffff811681146122a157600080fd5b60008083601f840112613c0557600080fd5b50813567ffffffffffffffff811115613c1d57600080fd5b602083019150836020828501011115613c3557600080fd5b9250929050565b60008060008060608587031215613c5257600080fd5b8435613c5d81613bd1565b935060208501359250604085013567ffffffffffffffff811115613c8057600080fd5b613c8c87828801613bf3565b95989497509550505050565b600080600060408486031215613cad57600080fd5b83359250602084013567ffffffffffffffff811115613ccb57600080fd5b613cd786828701613bf3565b9497909650939450505050565b60008083601f840112613cf657600080fd5b50813567ffffffffffffffff811115613d0e57600080fd5b6020830191508360208260051b8501011115613c3557600080fd5b60008060008060008060008060e0898b031215613d4557600080fd5b606089018a811115613d5657600080fd5b8998503567ffffffffffffffff80821115613d7057600080fd5b613d7c8c838d01613bf3565b909950975060808b0135915080821115613d9557600080fd5b613da18c838d01613ce4565b909750955060a08b0135915080821115613dba57600080fd5b50613dc78b828c01613ce4565b999c989b50969995989497949560c00135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715613e3357613e33613de0565b60405290565b60405160c0810167ffffffffffffffff81118282101715613e3357613e33613de0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ea357613ea3613de0565b604052919050565b600067ffffffffffffffff821115613ec557613ec5613de0565b5060051b60200190565b600082601f830112613ee057600080fd5b81356020613ef5613ef083613eab565b613e5c565b82815260059290921b84018101918181019086841115613f1457600080fd5b8286015b84811015613f38578035613f2b81613bd1565b8352918301918301613f18565b509695505050505050565b803560ff81168114613a1857600080fd5b600082601f830112613f6557600080fd5b813567ffffffffffffffff811115613f7f57613f7f613de0565b613fb060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e5c565b818152846020838601011115613fc557600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613a1857600080fd5b60008060008060008060c0878903121561401357600080fd5b863567ffffffffffffffff8082111561402b57600080fd5b6140378a838b01613ecf565b9750602089013591508082111561404d57600080fd5b6140598a838b01613ecf565b965061406760408a01613f43565b9550606089013591508082111561407d57600080fd5b6140898a838b01613f54565b945061409760808a01613fe2565b935060a08901359150808211156140ad57600080fd5b506140ba89828a01613f54565b9150509295509295509295565b6000602082840312156140d957600080fd5b8135612db581613bd1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361417357614173614113565b5060010190565b6bffffffffffffffffffffffff81811683821601908082111561386d5761386d614113565b808201808211156127fe576127fe614113565b60ff81811683821601908111156127fe576127fe614113565b61ffff81811683821601908082111561386d5761386d614113565b818103818111156127fe576127fe614113565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561423157614231614113565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261427457614274614236565b500490565b6bffffffffffffffffffffffff851681528360208201528260408201526080606082015260006142ac6080830184613afe565b9695505050505050565b600060ff821660ff84168160ff04811182151516156142d7576142d7614113565b029392505050565b805163ffffffff81168114613a1857600080fd5b805162ffffff81168114613a1857600080fd5b805161ffff81168114613a1857600080fd5b80516bffffffffffffffffffffffff81168114613a1857600080fd5b8051613a1881613bd1565b600082601f83011261435057600080fd5b81516020614360613ef083613eab565b82815260059290921b8401810191818101908684111561437f57600080fd5b8286015b84811015613f3857805161439681613bd1565b8352918301918301614383565b6000602082840312156143b557600080fd5b815167ffffffffffffffff808211156143cd57600080fd5b908301906101e082860312156143e257600080fd5b6143ea613e0f565b6143f3836142df565b8152614401602084016142df565b6020820152614412604084016142df565b6040820152614423606084016142f3565b606082015261443460808401614306565b608082015261444560a08401614318565b60a082015261445660c084016142df565b60c082015261446760e084016142df565b60e082015261010061447a8185016142df565b9082015261012061448c8482016142df565b90820152610140838101519082015261016080840151908201526101806144b4818501614334565b908201526101a083810151838111156144cc57600080fd5b6144d88882870161433f565b8284015250506101c091506144ee828401614334565b91810191909152949350505050565b63ffffffff81811683821601908082111561386d5761386d614113565b600081518084526020808501945080840160005b8381101561456057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161452e565b509495945050505050565b600061012063ffffffff808d1684528b6020850152808b1660408501525080606084015261459b8184018a61451a565b905082810360808401526145af818961451a565b905060ff871660a084015282810360c08401526145cc8187613afe565b905067ffffffffffffffff851660e08401528281036101008401526145f18185613afe565b9c9b505050505050505050505050565b82815260406020820152600061049d6040830184613afe565b60006020828403121561462c57600080fd5b81518015158114612db557600080fd5b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f83011261467357600080fd5b81356020614683613ef083613eab565b82815260059290921b840181019181810190868411156146a257600080fd5b8286015b84811015613f3857803583529183019183016146a6565b600082601f8301126146ce57600080fd5b813560206146de613ef083613eab565b82815260059290921b840181019181810190868411156146fd57600080fd5b8286015b84811015613f3857803567ffffffffffffffff8111156147215760008081fd5b61472f8986838b0101613f54565b845250918301918301614701565b60006020828403121561474f57600080fd5b813567ffffffffffffffff8082111561476757600080fd5b9083019060c0828603121561477b57600080fd5b614783613e39565b82358152602083013560208201526040830135828111156147a357600080fd5b6147af87828601614662565b6040830152506060830135828111156147c757600080fd5b6147d387828601614662565b6060830152506080830135828111156147eb57600080fd5b6147f7878286016146bd565b60808301525060a08301358281111561480f57600080fd5b61481b878286016146bd565b60a08301525095945050505050565b6bffffffffffffffffffffffff82811682821603908082111561386d5761386d614113565b60006bffffffffffffffffffffffff8084168061486e5761486e614236565b92169190910492915050565b60006bffffffffffffffffffffffff808316818516818304811182151516156148a5576148a5614113565b02949350505050565b6000602082840312156148c057600080fd5b5051919050565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b16604085015281606085015261490e8285018b61451a565b91508382036080850152614922828a61451a565b915060ff881660a085015283820360c085015261493f8288613afe565b90861660e085015283810361010085015290506145f18185613afe565b828482376000838201600081528351614979818360208801613ada565b0195945050505050565b600063ffffffff808316818516818304811182151516156148a5576148a5614113565b6000604082840312156149b857600080fd5b6040516040810181811067ffffffffffffffff821117156149db576149db613de0565b6040526149e7836142df565b8152602083015160208201528091505092915050565b600060808284031215614a0f57600080fd5b6040516080810181811067ffffffffffffffff82111715614a3257614a32613de0565b60405282518152614a45602084016142df565b6020820152614a56604084016142df565b6040820152606083015160608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000810000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162004f4138038062004f41833981016040819052620000359162000374565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200039b565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000100919062000374565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000165919062000374565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca919062000374565b3380600081620002215760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b038481169190911790915581161562000254576200025481620002b0565b5050508360028111156200026c576200026c620003be565b60e0816002811115620002835762000283620003be565b9052506001600160a01b0392831660805290821660a052811660c052919091166101005250620003d49050565b336001600160a01b038216036200030a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000218565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200037157600080fd5b50565b6000602082840312156200038757600080fd5b815162000394816200035b565b9392505050565b600060208284031215620003ae57600080fd5b8151600381106200039457600080fd5b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e05161010051614afe6200044360003960008181610102015261019b0152600081816101e201528181612dc201528181613122015281816132b501526138d401526000610230015260006103770152600081816103b001526105bf0152614afe6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a4c0ed3611610097578063b1dc65a411610066578063b1dc65a41461039b578063ca30e603146103ae578063e3d0e712146103d4578063f2fde38b146103e757610100565b8063a4c0ed36146102ef578063aed2e92914610302578063afcb95d71461032c578063b10b673c1461037557610100565b80636709d0e5116100d35780636709d0e51461022e57806379ba50971461025457806381ff70481461025c5780638da5cb5b146102d157610100565b8063181f5a7714610147578063349e8cca146101995780634b4fd03b146101e05780635147cd591461020e575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610140573d6000f35b3d6000fd5b005b6101836040518060400160405280601481526020017f4b6565706572526567697374727920322e312e3000000000000000000000000081525081565b6040516101909190613b53565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b7f00000000000000000000000000000000000000000000000000000000000000006040516101909190613b95565b61022161021c366004613baf565b6103fa565b6040516101909190613bc8565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456104a5565b6102ae60145460115463ffffffff780100000000000000000000000000000000000000000000000083048116937c01000000000000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610190565b60005473ffffffffffffffffffffffffffffffffffffffff166101bb565b6101456102fd366004613c47565b6105a7565b610315610310366004613ca3565b6107c3565b604080519215158352602083019190915201610190565b601154601254604080516000815260208101939093527c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690820152606001610190565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103a9366004613d34565b610939565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103e2366004614005565b6114b1565b6101456103f53660046140d2565b612290565b6000818160045b600f811015610487577fff00000000000000000000000000000000000000000000000000000000000000821683826020811061043f5761043f6140ef565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461047557506000949350505050565b8061047f8161414d565b915050610401565b5081600f1a600181111561049d5761049d613b66565b949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461052b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610616576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208114610650576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065e82840184613baf565b60008181526004602052604090205490915065010000000000900463ffffffff908116146106b8576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600101546106f39085906c0100000000000000000000000090046bffffffffffffffffffffffff16614185565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff90921691909117905560185461075e9085906141aa565b6018556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b6000806107ce6122a4565b6012546e010000000000000000000000000000900460ff161561081d576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526004602090815260409182902082516101008082018552825460ff81161515835263ffffffff918104821683860181905265010000000000820483168488015273ffffffffffffffffffffffffffffffffffffffff690100000000000000000090920482166060850181905260018601546bffffffffffffffffffffffff80821660808801526c0100000000000000000000000082041660a08701527801000000000000000000000000000000000000000000000000900490931660c08501526002909401541660e08301528451601f8901859004850281018501909552878552909361092c9391929189908990819084018382808284376000920191909152506122de92505050565b9097909650945050505050565b60005a604080516101208101825260125460ff808216835261010080830463ffffffff90811660208601526501000000000084048116958501959095526901000000000000000000830462ffffff1660608501526c01000000000000000000000000830461ffff1660808501526e0100000000000000000000000000008304821615801560a08601526f010000000000000000000000000000008404909216151560c085015270010000000000000000000000000000000083046bffffffffffffffffffffffff1660e08501527c010000000000000000000000000000000000000000000000000000000090920490931690820152919250610a67576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff16610ab0576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6011548a3514610aec576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610af99060016141bd565b60ff1686141580610b0a5750858414155b15610b41576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b518a8a8a8a8a8a8a8a6124e0565b6000610b5d8a8a612749565b9050600081604001515167ffffffffffffffff811115610b7f57610b7f613deb565b604051908082528060200260200182016040528015610c4357816020015b604080516101e081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610b9d5790505b5090506000805b8360400151518110156110c1576004600085604001518381518110610c7157610c716140ef565b602090810291909101810151825281810192909252604090810160002081516101008082018452825460ff81161515835263ffffffff91810482169583019590955265010000000000850481169382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009094048416606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490921660c08301526002015490911660e08201528351849083908110610d6357610d636140ef565b602002602001015160000181905250610d9884604001518281518110610d8b57610d8b6140ef565b60200260200101516103fa565b838281518110610daa57610daa6140ef565b6020026020010151608001906001811115610dc757610dc7613b66565b90816001811115610dda57610dda613b66565b81525050610e5285848381518110610df457610df46140ef565b602002602001015160800151858481518110610e1257610e126140ef565b602002602001015160000151602001518760a001518581518110610e3857610e386140ef565b602002602001015151886000015189602001516001612804565b838281518110610e6457610e646140ef565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050610f3084604001518281518110610eab57610eab6140ef565b6020026020010151848381518110610ec557610ec56140ef565b60200260200101516080015186608001518481518110610ee757610ee76140ef565b6020026020010151868581518110610f0157610f016140ef565b602002602001015160000151878681518110610f1f57610f1f6140ef565b60200260200101516040015161284f565b838281518110610f4257610f426140ef565b60200260200101516020019015159081151581525050828181518110610f6a57610f6a6140ef565b60200260200101516020015115610f8d57610f866001836141d6565b9150610f92565b6110af565b610ff8838281518110610fa757610fa76140ef565b6020026020010151600001516060015185606001518381518110610fcd57610fcd6140ef565b60200260200101518660a001518481518110610feb57610feb6140ef565b60200260200101516122de565b84838151811061100a5761100a6140ef565b6020026020010151606001858481518110611027576110276140ef565b602002602001015160a0018281525082151515158152505050828181518110611052576110526140ef565b602002602001015160a001518661106991906141f1565b95506110af84604001518281518110611084576110846140ef565b602002602001015184838151811061109e5761109e6140ef565b602002602001015160800151612997565b806110b98161414d565b915050610c4a565b508061ffff166000036110d85750505050506114a7565b83516110e59060016141bd565b6110f49060ff1661044c614204565b616b6c6111028d6010614204565b5a61110d90896141f1565b61111791906141aa565b61112191906141aa565b61112b91906141aa565b9450611b5861113e61ffff831687614270565b61114891906141aa565b945060008060008060005b87604001515181101561134957868181518110611172576111726140ef565b60200260200101516020015115611337576111ce8a888381518110611199576111996140ef565b6020026020010151608001518a60a0015184815181106111bb576111bb6140ef565b6020026020010151518c60000151612a1e565b8782815181106111e0576111e06140ef565b602002602001015160c001818152505061123c898960400151838151811061120a5761120a6140ef565b6020026020010151898481518110611224576112246140ef565b60200260200101518b600001518c602001518b612a3e565b909350915061124b8285614185565b93506112578386614185565b945086818151811061126b5761126b6140ef565b60200260200101516060015115158860400151828151811061128f5761128f6140ef565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b84866112c49190614185565b8a85815181106112d6576112d66140ef565b602002602001015160a001518b86815181106112f4576112f46140ef565b602002602001015160c001518d608001518781518110611316576113166140ef565b602002602001015160405161132e9493929190614284565b60405180910390a35b806113418161414d565b915050611153565b5050336000908152600b6020526040902080548492506002906113819084906201000090046bffffffffffffffffffffffff16614185565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080601260000160108282829054906101000a90046bffffffffffffffffffffffff166113db9190614185565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060008f60016003811061141e5761141e6140ef565b602002013560001c9050600060088264ffffffffff16901c905087610100015163ffffffff168163ffffffff16111561149d57601280547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416021790555b5050505050505050505b5050505050505050565b6114b9612b31565b601f865111156114f5576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360ff16600003611532576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451865114158061155157506115498460036142c1565b60ff16865111155b15611588576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e547001000000000000000000000000000000009091046bffffffffffffffffffffffff169060005b816bffffffffffffffffffffffff1681101561161d5761160a600e82815481106115e1576115e16140ef565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168484612bb2565b50806116158161414d565b9150506115b5565b5060008060005b836bffffffffffffffffffffffff1681101561172657600d818154811061164d5761164d6140ef565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff90921694509082908110611688576116886140ef565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591508061171e8161414d565b915050611624565b50611733600d6000613a28565b61173f600e6000613a28565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c51811015611ac357600c60008e8381518110611784576117846140ef565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff16156117ef576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c60008f8481518110611820576118206140ef565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c90829081106118c8576118c86140ef565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600b83526040908190208151608081018352905460ff80821615801584526101008304909116958301959095526bffffffffffffffffffffffff6201000082048116938301939093526e010000000000000000000000000000900490911660608201529450925061198d576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff87166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009095169490941717919091169290921791909117905580611abb8161414d565b915050611765565b50508a51611ad99150600d9060208d0190613a46565b508851611aed90600e9060208c0190613a46565b50600087806020019051810190611b0491906143ae565b90506040518061012001604052808a60ff168152602001826000015163ffffffff168152602001826020015163ffffffff168152602001826060015162ffffff168152602001826080015161ffff1681526020016012600001600e9054906101000a900460ff16151581526020016012600001600f9054906101000a900460ff1615158152602001866bffffffffffffffffffffffff168152602001600063ffffffff16815250601260008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160096101000a81548162ffffff021916908362ffffff160217905550608082015181600001600c6101000a81548161ffff021916908361ffff16021790555060a082015181600001600e6101000a81548160ff02191690831515021790555060c082015181600001600f6101000a81548160ff02191690831515021790555060e08201518160000160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061010082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050506040518061018001604052808260a001516bffffffffffffffffffffffff16815260200182610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601360010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001826040015163ffffffff1681526020018260c0015163ffffffff168152602001601360010160149054906101000a900463ffffffff1663ffffffff168152602001601360010160189054906101000a900463ffffffff1663ffffffff1681526020016013600101601c9054906101000a900463ffffffff1663ffffffff1681526020018260e0015163ffffffff16815260200182610100015163ffffffff16815260200182610120015163ffffffff168152602001826101c0015173ffffffffffffffffffffffffffffffffffffffff16815250601360008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555061016082015181600201600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505080610140015160168190555080610160015160178190555060006013600101601c9054906101000a900463ffffffff1690506120c7612dbc565b601480547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff93841602178082556001926018916121429185917801000000000000000000000000000000000000000000000000900416614508565b92506101000a81548163ffffffff021916908363ffffffff16021790555061218c4630601360010160189054906101000a900463ffffffff1663ffffffff168f8f8f8f8f8f612e71565b60115560005b61219c6009612f1b565b8110156121cc576121b96121b1600983612f25565b600990612f31565b50806121c48161414d565b915050612192565b5060005b826101a001515181101561222357612210836101a0015182815181106121f8576121f86140ef565b60200260200101516009612f5390919063ffffffff16565b508061221b8161414d565b9150506121d0565b507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581601154601360010160189054906101000a900463ffffffff168f8f8f8f8f8f60405161227a99989796959493929190614576565b60405180910390a1505050505050505050505050565b612298612b31565b6122a181612f75565b50565b32156122dc576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60125460009081906f01000000000000000000000000000000900460ff1615612333576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f010000000000000000000000000000001790555a9050634585e33b60e01b836040516024016123899190613b53565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d169061245c908790879060040161460c565b6020604051808303816000875af115801561247b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249f9190614625565b91505a6124ac90826141f1565b9050601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1690559094909350915050565b600087876040516124f2929190614647565b604051908190038120612509918b90602001614657565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b888110156126e057600185878360208110612575576125756140ef565b61258291901a601b6141bd565b8c8c85818110612594576125946140ef565b905060200201358b8b868181106125ad576125ad6140ef565b90506020020135604051600081526020016040526040516125ea949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561260c573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506126ba576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b8401935080806126d89061414d565b915050612558565b50827e0101010101010101010101010101010101010101010101010101010101010184161461273b576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b6127826040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600061279083850185614748565b60408101515160608201515191925090811415806127b357508082608001515114155b806127c35750808260a001515114155b156127fa576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5090505b92915050565b60008061281688878b6000015161306a565b90506000806128318b8a63ffffffff16858a8a60018b6130ed565b90925090506128408183614185565b9b9a5050505050505050505050565b60008085600181111561286457612864613b66565b0361288557612874868585613498565b6128805750600061298e565b6128da565b600185600181111561289957612899613b66565b036128a857612874868561358f565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128e2612dbc565b836040015163ffffffff161161293257857fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd5636856040516129229190613b53565b60405180910390a250600061298e565b816bffffffffffffffffffffffff168360a001516bffffffffffffffffffffffff16101561298a57857f377c8b0c126ae5248d27aca1c76fac4608aff85673ee3caf09747e1044549e02856040516129229190613b53565b5060015b95945050505050565b60008160018111156129ab576129ab613b66565b03612a1a576129b8612dbc565b6000838152600460205260409020600101805463ffffffff929092167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790555b5050565b6000612a2b84848461306a565b90508085101561049d5750929392505050565b600080612a59888760a001518860c0015188888860016130ed565b90925090506000612a6a8284614185565b600089815260046020526040902060010180549192508291600c90612aae9084906c0100000000000000000000000090046bffffffffffffffffffffffff16614835565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a815260046020526040812060010180548594509092612af791859116614185565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146122dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610522565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015290612dae576000816060015185612c4a9190614835565b90506000612c58858361485a565b90508083604001818151612c6c9190614185565b6bffffffffffffffffffffffff16905250612c878582614885565b83606001818151612c989190614185565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b6040015190505b9392505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115612df257612df2613b66565b03612e6c57606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6791906148b9565b905090565b504390565b6000808a8a8a8a8a8a8a8a8a604051602001612e95999897969594939291906148d2565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b60006127fe825490565b6000612db5838361375b565b6000612db58373ffffffffffffffffffffffffffffffffffffffff8416613785565b6000612db58373ffffffffffffffffffffffffffffffffffffffff841661387f565b3373ffffffffffffffffffffffffffffffffffffffff821603612ff4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610522565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000808085600181111561308057613080613b66565b0361308f5750620138806130ae565b60018560018111156130a3576130a3613b66565b036128a85750620186a05b6130bf63ffffffff85166014614204565b6130ca8460016141bd565b6130d99060ff16611d4c614204565b6130e390836141aa565b61298e91906141aa565b6000806000896080015161ffff16876131069190614204565b90508380156131145750803a105b1561311c57503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561315257613152613b66565b036132b15760408051600081526020810190915285156131b057600036604051806080016040528060488152602001614aaa6048913960405160200161319a93929190614967565b6040516020818303038152906040529050613218565b6015546131cc90640100000000900463ffffffff16600461498e565b63ffffffff1667ffffffffffffffff8111156131ea576131ea613deb565b6040519080825280601f01601f191660200182016040528015613214576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e90613268908490600401613b53565b602060405180830381865afa158015613285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a991906148b9565b91505061335d565b60017f000000000000000000000000000000000000000000000000000000000000000060028111156132e5576132e5613b66565b0361335d57606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a91906148b9565b90505b8461337957808b6080015161ffff166133769190614204565b90505b61338761ffff871682614270565b9050600087826133978c8e6141aa565b6133a19086614204565b6133ab91906141aa565b6133bd90670de0b6b3a7640000614204565b6133c79190614270565b905060008c6040015163ffffffff1664e8d4a510006133e69190614204565b898e6020015163ffffffff16858f886133ff9190614204565b61340991906141aa565b61341790633b9aca00614204565b6134219190614204565b61342b9190614270565b61343591906141aa565b90506b033b2e3c9fd0803ce800000061344e82846141aa565b1115613486576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b600080838060200190518101906134af91906149b1565b90508260c0015163ffffffff16816000015163ffffffff16101561350f57847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516134fd9190613b53565b60405180910390a26000915050612db5565b6020810151158015906135365750602081015181516135339063ffffffff166138ce565b14155b8061354f5750613544612dbc565b815163ffffffff1610155b1561358457847f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301856040516134fd9190613b53565b506001949350505050565b600080828060200190518101906135a69190614a08565b6060810151909150158015906135d2575080606001516135cf826040015163ffffffff166138ce565b14155b806135ee57506135e0612dbc565b816040015163ffffffff1610155b1561363557837f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301846040516136239190613b53565b60405180910390a260009150506127fe565b8051602080830151604051600093613687938993919201928352602083019190915260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016604082015260440190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600890935291205490915060ff161561371857847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516137059190613b53565b60405180910390a26000925050506127fe565b600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505092915050565b6000826000018281548110613772576137726140ef565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561386e5760006137a96001836141f1565b85549091506000906137bd906001906141f1565b90508181146138225760008660000182815481106137dd576137dd6140ef565b9060005260206000200154905080876000018481548110613800576138006140ef565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061383357613833614a7a565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506127fe565b60009150506127fe565b5092915050565b60008181526001830160205260408120546138c6575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556127fe565b5060006127fe565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111561390457613904613b66565b03613a1e576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397b91906148b9565b90508083101580613996575061010061399484836141f1565b115b156139a45750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a8290602401602060405180830381865afa1580156139fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db591906148b9565b504090565b919050565b50805460008255906000526020600020908101906122a19190613ad0565b828054828255906000526020600020908101928215613ac0579160200282015b82811115613ac057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613a66565b50613acc929150613ad0565b5090565b5b80821115613acc5760008155600101613ad1565b60005b83811015613b00578181015183820152602001613ae8565b50506000910152565b60008151808452613b21816020860160208601613ae5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612db56020830184613b09565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613ba957613ba9613b66565b91905290565b600060208284031215613bc157600080fd5b5035919050565b6020810160028310613ba957613ba9613b66565b73ffffffffffffffffffffffffffffffffffffffff811681146122a157600080fd5b60008083601f840112613c1057600080fd5b50813567ffffffffffffffff811115613c2857600080fd5b602083019150836020828501011115613c4057600080fd5b9250929050565b60008060008060608587031215613c5d57600080fd5b8435613c6881613bdc565b935060208501359250604085013567ffffffffffffffff811115613c8b57600080fd5b613c9787828801613bfe565b95989497509550505050565b600080600060408486031215613cb857600080fd5b83359250602084013567ffffffffffffffff811115613cd657600080fd5b613ce286828701613bfe565b9497909650939450505050565b60008083601f840112613d0157600080fd5b50813567ffffffffffffffff811115613d1957600080fd5b6020830191508360208260051b8501011115613c4057600080fd5b60008060008060008060008060e0898b031215613d5057600080fd5b606089018a811115613d6157600080fd5b8998503567ffffffffffffffff80821115613d7b57600080fd5b613d878c838d01613bfe565b909950975060808b0135915080821115613da057600080fd5b613dac8c838d01613cef565b909750955060a08b0135915080821115613dc557600080fd5b50613dd28b828c01613cef565b999c989b50969995989497949560c00135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715613e3e57613e3e613deb565b60405290565b60405160c0810167ffffffffffffffff81118282101715613e3e57613e3e613deb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613eae57613eae613deb565b604052919050565b600067ffffffffffffffff821115613ed057613ed0613deb565b5060051b60200190565b600082601f830112613eeb57600080fd5b81356020613f00613efb83613eb6565b613e67565b82815260059290921b84018101918181019086841115613f1f57600080fd5b8286015b84811015613f43578035613f3681613bdc565b8352918301918301613f23565b509695505050505050565b803560ff81168114613a2357600080fd5b600082601f830112613f7057600080fd5b813567ffffffffffffffff811115613f8a57613f8a613deb565b613fbb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e67565b818152846020838601011115613fd057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613a2357600080fd5b60008060008060008060c0878903121561401e57600080fd5b863567ffffffffffffffff8082111561403657600080fd5b6140428a838b01613eda565b9750602089013591508082111561405857600080fd5b6140648a838b01613eda565b965061407260408a01613f4e565b9550606089013591508082111561408857600080fd5b6140948a838b01613f5f565b94506140a260808a01613fed565b935060a08901359150808211156140b857600080fd5b506140c589828a01613f5f565b9150509295509295509295565b6000602082840312156140e457600080fd5b8135612db581613bdc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361417e5761417e61411e565b5060010190565b6bffffffffffffffffffffffff8181168382160190808211156138785761387861411e565b808201808211156127fe576127fe61411e565b60ff81811683821601908111156127fe576127fe61411e565b61ffff8181168382160190808211156138785761387861411e565b818103818111156127fe576127fe61411e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561423c5761423c61411e565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261427f5761427f614241565b500490565b6bffffffffffffffffffffffff851681528360208201528260408201526080606082015260006142b76080830184613b09565b9695505050505050565b600060ff821660ff84168160ff04811182151516156142e2576142e261411e565b029392505050565b805163ffffffff81168114613a2357600080fd5b805162ffffff81168114613a2357600080fd5b805161ffff81168114613a2357600080fd5b80516bffffffffffffffffffffffff81168114613a2357600080fd5b8051613a2381613bdc565b600082601f83011261435b57600080fd5b8151602061436b613efb83613eb6565b82815260059290921b8401810191818101908684111561438a57600080fd5b8286015b84811015613f435780516143a181613bdc565b835291830191830161438e565b6000602082840312156143c057600080fd5b815167ffffffffffffffff808211156143d857600080fd5b908301906101e082860312156143ed57600080fd5b6143f5613e1a565b6143fe836142ea565b815261440c602084016142ea565b602082015261441d604084016142ea565b604082015261442e606084016142fe565b606082015261443f60808401614311565b608082015261445060a08401614323565b60a082015261446160c084016142ea565b60c082015261447260e084016142ea565b60e08201526101006144858185016142ea565b908201526101206144978482016142ea565b90820152610140838101519082015261016080840151908201526101806144bf81850161433f565b908201526101a083810151838111156144d757600080fd5b6144e38882870161434a565b8284015250506101c091506144f982840161433f565b91810191909152949350505050565b63ffffffff8181168382160190808211156138785761387861411e565b600081518084526020808501945080840160005b8381101561456b57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614539565b509495945050505050565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526145a68184018a614525565b905082810360808401526145ba8189614525565b905060ff871660a084015282810360c08401526145d78187613b09565b905067ffffffffffffffff851660e08401528281036101008401526145fc8185613b09565b9c9b505050505050505050505050565b82815260406020820152600061049d6040830184613b09565b60006020828403121561463757600080fd5b81518015158114612db557600080fd5b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f83011261467e57600080fd5b8135602061468e613efb83613eb6565b82815260059290921b840181019181810190868411156146ad57600080fd5b8286015b84811015613f4357803583529183019183016146b1565b600082601f8301126146d957600080fd5b813560206146e9613efb83613eb6565b82815260059290921b8401810191818101908684111561470857600080fd5b8286015b84811015613f4357803567ffffffffffffffff81111561472c5760008081fd5b61473a8986838b0101613f5f565b84525091830191830161470c565b60006020828403121561475a57600080fd5b813567ffffffffffffffff8082111561477257600080fd5b9083019060c0828603121561478657600080fd5b61478e613e44565b82358152602083013560208201526040830135828111156147ae57600080fd5b6147ba8782860161466d565b6040830152506060830135828111156147d257600080fd5b6147de8782860161466d565b6060830152506080830135828111156147f657600080fd5b614802878286016146c8565b60808301525060a08301358281111561481a57600080fd5b614826878286016146c8565b60a08301525095945050505050565b6bffffffffffffffffffffffff8281168282160390808211156138785761387861411e565b60006bffffffffffffffffffffffff8084168061487957614879614241565b92169190910492915050565b60006bffffffffffffffffffffffff808316818516818304811182151516156148b0576148b061411e565b02949350505050565b6000602082840312156148cb57600080fd5b5051919050565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b1660408501528160608501526149198285018b614525565b9150838203608085015261492d828a614525565b915060ff881660a085015283820360c085015261494a8288613b09565b90861660e085015283810361010085015290506145fc8185613b09565b828482376000838201600081528351614984818360208801613ae5565b0195945050505050565b600063ffffffff808316818516818304811182151516156148b0576148b061411e565b6000604082840312156149c357600080fd5b6040516040810181811067ffffffffffffffff821117156149e6576149e6613deb565b6040526149f2836142ea565b8152602083015160208201528091505092915050565b600060808284031215614a1a57600080fd5b6040516080810181811067ffffffffffffffff82111715614a3d57614a3d613deb565b60405282518152614a50602084016142ea565b6020820152614a61604084016142ea565b6040820152606083015160608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000810000a", } var KeeperRegistryABI = KeeperRegistryMetaData.ABI diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt index ab7dffc8fce..dbdc618d2ab 100644 --- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -30,7 +30,7 @@ keeper_registry_wrapper1_1: ../../contracts/solc/v0.7/KeeperRegistry1_1.abi ../. keeper_registry_wrapper1_2: ../../contracts/solc/v0.8.6/KeeperRegistry1_2.abi ../../contracts/solc/v0.8.6/KeeperRegistry1_2.bin 41faf687ad6a5171cc91e627244d0b3d6f62d393c418ca22d4ba7fc921fd32c6 keeper_registry_wrapper1_3: ../../contracts/solc/v0.8.6/KeeperRegistry1_3.abi ../../contracts/solc/v0.8.6/KeeperRegistry1_3.bin 5e1414eacbc1880b7349a4f253b7eca176f7f6300ef3cd834c493ce795a17e25 keeper_registry_wrapper2_0: ../../contracts/solc/v0.8.6/KeeperRegistry2_0.abi ../../contracts/solc/v0.8.6/KeeperRegistry2_0.bin c32dea7d5ef66b7c58ddc84ddf69aa44df1b3ae8601fbc271c95be4ff5853056 -keeper_registry_wrapper_2_1: ../../contracts/solc/v0.8.16/KeeperRegistry2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistry2_1.bin e447c18bc78f6bcd61644a9a89063b9589c6e9d8e6e1bc6625587e7d075fa2f1 +keeper_registry_wrapper_2_1: ../../contracts/solc/v0.8.16/KeeperRegistry2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistry2_1.bin 29b8d9daa13afd6f965635173175fde183cb239f65a088a25f650861639af2f0 keepers_vrf_consumer: ../../contracts/solc/v0.8.6/KeepersVRFConsumer.abi ../../contracts/solc/v0.8.6/KeepersVRFConsumer.bin fa75572e689c9e84705c63e8dbe1b7b8aa1a8fe82d66356c4873d024bb9166e8 llo_feeds: ../../contracts/solc/v0.8.16/VerifierProxy.abi ../../contracts/solc/v0.8.16/VerifierProxy.bin 3b69ffe9c694e8551b5375c02b9e960adc985e2390566740e7fea70c89e436f1 llo_feeds_test: ../../contracts/solc/v0.8.16/ExposedVerifier.abi ../../contracts/solc/v0.8.16/ExposedVerifier.bin 6932cea8f2738e874d3ec9e1a4231d2421704030c071d9e15dd2f7f08482c246