From 964fb224787c29317de53c2d4509b5786796a3ab Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Thu, 29 Jun 2023 18:32:07 -0400 Subject: [PATCH 1/4] build AutomationUtils contract and update tests --- contracts/scripts/native_solc_compile_all | 1 + .../dev/automation/2_1/AutomationUtils2_1.sol | 24 ++ .../v0.8/automation/KeeperRegistry2_1.test.ts | 221 ++++++------ contracts/test/v0.8/automation/helpers.ts | 25 +- .../automation_utils_2_1.go | 314 ++++++++++++++++++ ...rapper-dependency-versions-do-not-edit.txt | 1 + core/gethwrappers/go_generate.go | 1 + 7 files changed, 473 insertions(+), 114 deletions(-) create mode 100644 contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol create mode 100644 core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go diff --git a/contracts/scripts/native_solc_compile_all b/contracts/scripts/native_solc_compile_all index e92ff2a7045..b0ac877251e 100755 --- a/contracts/scripts/native_solc_compile_all +++ b/contracts/scripts/native_solc_compile_all @@ -55,6 +55,7 @@ $SCRIPTPATH/native_solc8_16_compile dev/automation/2_1/KeeperRegistryLogicA2_1.s $SCRIPTPATH/native_solc8_16_compile dev/automation/2_1/KeeperRegistryLogicB2_1.sol $SCRIPTPATH/native_solc8_16_compile dev/automation/2_1/interfaces/IKeeperRegistryMaster.sol $SCRIPTPATH/native_solc8_16_compile dev/automation/2_1/interfaces/ILogAutomation.sol +$SCRIPTPATH/native_solc8_16_compile dev/automation/2_1/AutomationUtils2_1.sol $SCRIPTPATH/native_solc8_6_compile dev/automation/tests/LogUpkeepCounter.sol $SCRIPTPATH/native_solc8_6_compile automation/UpkeepTranscoder.sol $SCRIPTPATH/native_solc8_6_compile tests/VerifiableLoadUpkeep.sol diff --git a/contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol b/contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol new file mode 100644 index 00000000000..7951d15c2b3 --- /dev/null +++ b/contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.16; + +import "./KeeperRegistryBase2_1.sol"; + +/** + * @notice this file exposes structs that are otherwise internal to the automation registry + * doing this allows those structs to be encoded and decoded with type safety in offchain code + * and tests because generated wrappers are made available + */ + +contract AutomationUtils2_1 { + function _onChainConfig(KeeperRegistryBase2_1.OnchainConfig memory) external {} + + function _report(KeeperRegistryBase2_1.Report memory) external {} + + function _logTriggerConfig(KeeperRegistryBase2_1.LogTriggerConfig memory) external {} + + function _conditionalTriggerConfig(KeeperRegistryBase2_1.ConditionalTriggerConfig memory) external {} + + function _logTrigger(KeeperRegistryBase2_1.LogTrigger memory) external {} + + function _conditionalTrigger(KeeperRegistryBase2_1.ConditionalTrigger memory) external {} +} diff --git a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts index 59ead90bcf1..2b01add1b21 100644 --- a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts +++ b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts @@ -22,6 +22,7 @@ import { UpkeepTranscoder__factory as UpkeepTranscoderFactory } from '../../../t import { MockArbGasInfo__factory as MockArbGasInfoFactory } from '../../../typechain/factories/MockArbGasInfo__factory' import { MockOVMGasPriceOracle__factory as MockOVMGasPriceOracleFactory } from '../../../typechain/factories/MockOVMGasPriceOracle__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' import { MockV3Aggregator } from '../../../typechain/MockV3Aggregator' import { LinkToken } from '../../../typechain/LinkToken' @@ -38,7 +39,7 @@ import { InsufficientFundsUpkeepReportEvent, CancelledUpkeepReportEvent, } from '../../../typechain/IKeeperRegistryMaster' -import { deployRegistry21, OnchainConfig21, encodeConfig21 } from './helpers' +import { deployRegistry21 } from './helpers' const describeMaybe = process.env.SKIP_SLOW ? describe.skip : describe const itMaybe = process.env.SKIP_SLOW ? it.skip : it @@ -70,6 +71,12 @@ enum Trigger { LOG, } +// un-exported types that must be extracted from the utils contract +type Report = Parameters[0] +type OnChainConfig = Parameters[0] +type LogTrigger = Parameters[0] +type ConditionalTrigger = Parameters[0] + // ----------------------------------------------------------------------------------------------- // These are the gas overheads that off chain systems should provide to check upkeep / transmit // These overheads are not actually charged for @@ -119,24 +126,9 @@ const zeroAddress = ethers.constants.AddressZero const epochAndRound5_1 = '0x0000000000000000000000000000000000000000000000000000000000000501' -const logTriggerConfig = ethers.utils.defaultAbiCoder.encode( - ['tuple(address,uint8,bytes32,bytes32,bytes32,bytes32)'], - [ - [ - randomAddress(), - 0, - ethers.utils.randomBytes(32), - ethers.utils.randomBytes(32), - ethers.utils.randomBytes(32), - ethers.utils.randomBytes(32), - ], - ], -) +let logTriggerConfig: string +let blockTriggerConfig: string -const blockTriggerConfig = ethers.utils.defaultAbiCoder.encode( - ['tuple(uint32)'], - [[1]], -) // ----------------------------------------------------------------------------------------------- // Smart contract factories @@ -166,6 +158,7 @@ let transcoder: UpkeepTranscoder let mockArbGasInfo: MockArbGasInfo let mockOVMGasPriceOracle: MockOVMGasPriceOracle let mercuryUpkeep: MercuryUpkeep +let automationUtils: AutomationUtils function randomAddress() { return ethers.Wallet.createRandom().address @@ -199,21 +192,49 @@ const getTriggerType = (upkeepId: BigNumber): Trigger => { return bytes[15] as Trigger } -const encodeBlockTrigger = (blockNum: number, blockHash: BytesLike) => { - return ethers.utils.defaultAbiCoder.encode( - ['tuple(uint32, bytes32)'], - [[blockNum, blockHash]], +const encodeConfig = (onchainConfig: OnChainConfig) => { + return ( + '0x' + + automationUtils.interface + .encodeFunctionData('_onChainConfig', [onchainConfig]) + .slice(10) ) } -const encodeLogTrigger = ( - txHash: BytesLike, - logIndex: number, - blockNum: number, - blockHash: BytesLike, -) => { + +const encodeBlockTrigger = (conditionalTrigger: ConditionalTrigger) => { + return ( + '0x' + + automationUtils.interface + .encodeFunctionData('_conditionalTrigger', [conditionalTrigger]) + .slice(10) + ) +} + +const encodeLogTrigger = (logTrigger: LogTrigger) => { + return ( + '0x' + + automationUtils.interface + .encodeFunctionData('_logTrigger', [logTrigger]) + .slice(10) + ) +} + +const encodeReport = (report: Report) => { + // TODO - we should update the report bytes to match the struct + // return ( + // '0x' + + // automationUtils.interface.encodeFunctionData('_report', [report]).slice(10) + // ) return ethers.utils.defaultAbiCoder.encode( - ['tuple(bytes32, uint32, uint32, bytes32)'], - [[txHash, logIndex, blockNum, blockHash]], + ['uint256', 'uint256', 'uint256[]', 'uint256[]', 'bytes[]', 'bytes[]'], + [ + report.fastGasWei, + report.linkNative, + report.upkeepIds, + report.gasLimits, + report.triggers, + report.performDatas, + ], ) } @@ -232,34 +253,19 @@ type UpkeepData = { trigger: BytesLike } -// just a wrapper for defaultAbiCoder, but provided type safety for when report changes -const encodeReport = ( - gasWei: BigNumberish, - linkEth: BigNumberish, - upkeepIDs: BigNumberish[], - performGases: BigNumberish[], - triggers: BytesLike[], - performData: BytesLike[], -) => { - return ethers.utils.defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256[]', 'uint256[]', 'bytes[]', 'bytes[]'], - [gasWei, linkEth, upkeepIDs, performGases, triggers, performData], - ) -} - const makeReport = (upkeeps: UpkeepData[]) => { const upkeepIds = upkeeps.map((u) => u.Id) const performGases = upkeeps.map((u) => u.performGas) const triggers = upkeeps.map((u) => u.trigger) - const performData = upkeeps.map((u) => u.performData) - return encodeReport( - gasWei, - linkEth, + const performDatas = upkeeps.map((u) => u.performData) + return encodeReport({ + fastGasWei: gasWei, + linkNative: linkEth, upkeepIds, - performGases, + gasLimits: performGases, triggers, - performData, - ) + performDatas, + }) } const makeLatestBlockReport = async (upkeepsIDs: BigNumberish[]) => { @@ -269,7 +275,10 @@ const makeLatestBlockReport = async (upkeepsIDs: BigNumberish[]) => { upkeeps.push({ Id: upkeepsIDs[i], performGas: executeGas, - trigger: encodeBlockTrigger(latestBlock.number, latestBlock.hash), + trigger: encodeBlockTrigger({ + blockNum: latestBlock.number, + blockHash: latestBlock.hash, + }), performData: '0x', }) } @@ -430,6 +439,9 @@ describe('KeeperRegistry2_1', () => { before(async () => { personas = (await getUsers()).personas + const utilsFactory = await ethers.getContractFactory('AutomationUtils2_1') + automationUtils = await utilsFactory.deploy() + linkTokenFactory = await ethers.getContractFactory('LinkToken') // need full path because there are two contracts with name MockV3Aggregator mockV3AggregatorFactory = (await ethers.getContractFactory( @@ -506,6 +518,27 @@ describe('KeeperRegistry2_1', () => { for (const signer of signers) { signerAddresses.push(await signer.getAddress()) } + + logTriggerConfig = + '0x' + + automationUtils.interface + .encodeFunctionData('_logTriggerConfig', [ + { + contractAddress: randomAddress(), + filterSelector: 0, + topic0: ethers.utils.randomBytes(32), + topic1: ethers.utils.randomBytes(32), + topic2: ethers.utils.randomBytes(32), + topic3: ethers.utils.randomBytes(32), + }, + ]) + .slice(10) + + blockTriggerConfig = + '0x' + + automationUtils.interface + .encodeFunctionData('_conditionalTriggerConfig', [{ checkCadance: 1 }]) + .slice(10) }) const linkForGas = ( @@ -600,7 +633,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21({ + encodeConfig({ paymentPremiumPPB: test.premium, flatFeeMicroLink: test.flatFee, checkGasLimit, @@ -721,18 +754,18 @@ describe('KeeperRegistry2_1', () => { let trigger: string switch (getTriggerType(upkeepIds[i])) { case Trigger.CONDITION: - trigger = encodeBlockTrigger( - config.checkBlockNum, - config.checkBlockHash, - ) + trigger = encodeBlockTrigger({ + blockNum: config.checkBlockNum, + blockHash: config.checkBlockHash, + }) break case Trigger.LOG: - trigger = encodeLogTrigger( - config.txHash || ethers.utils.randomBytes(32), - config.logIndex, - config.checkBlockNum, - config.checkBlockHash, - ) + trigger = encodeLogTrigger({ + txHash: config.txHash || ethers.utils.randomBytes(32), + logIndex: config.logIndex, + blockNum: config.checkBlockNum, + blockHash: config.checkBlockHash, + }) break } upkeeps.push({ @@ -866,7 +899,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ] @@ -1085,14 +1118,14 @@ describe('KeeperRegistry2_1', () => { // Push an extra perform data performDatas.push('0x') - const report = encodeReport( - 0, - 0, + const report = encodeReport({ + fastGasWei: 0, + linkNative: 0, upkeepIds, gasLimits, triggers, performDatas, - ) + }) await evmRevert( getTransmitTxWithReport(registry, keeper1, report), @@ -1669,7 +1702,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, 10, // maximise f to maximise overhead - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) @@ -1714,7 +1747,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, newF, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) @@ -1853,7 +1886,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, newF, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) @@ -1963,7 +1996,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, newF, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) @@ -3440,7 +3473,7 @@ describe('KeeperRegistry2_1', () => { const newRegistrars = [randomAddress(), randomAddress()] const upkeepManager = randomAddress() - const newConfig: OnchainConfig21 = { + const newConfig: OnChainConfig = { paymentPremiumPPB: payment, flatFeeMicroLink: flatFee, checkGasLimit: maxGas, @@ -3466,7 +3499,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21(newConfig), + encodeConfig(newConfig), offchainVersion, offchainBytes, ), @@ -3489,7 +3522,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21(newConfig), + encodeConfig(newConfig), offchainVersion, offchainBytes, ) @@ -3552,7 +3585,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21(newConfig), + encodeConfig(newConfig), offchainVersion, offchainBytes, ) @@ -3568,7 +3601,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21(newConfig), + encodeConfig(newConfig), offchainVersion, offchainBytes, ) @@ -3596,7 +3629,7 @@ describe('KeeperRegistry2_1', () => { newKeepers, newKeepers, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ), @@ -3615,7 +3648,7 @@ describe('KeeperRegistry2_1', () => { newKeepers, newKeepers, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ), @@ -3631,7 +3664,7 @@ describe('KeeperRegistry2_1', () => { newKeepers, newKeepers, 0, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ), @@ -3648,7 +3681,7 @@ describe('KeeperRegistry2_1', () => { signers, newKeepers, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ), @@ -3665,7 +3698,7 @@ describe('KeeperRegistry2_1', () => { newKeepers, newKeepers, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ), @@ -3687,7 +3720,7 @@ describe('KeeperRegistry2_1', () => { newSigners, newKeepers, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ), @@ -3709,7 +3742,7 @@ describe('KeeperRegistry2_1', () => { newKeepers, newTransmitters, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ), @@ -3737,7 +3770,7 @@ describe('KeeperRegistry2_1', () => { newSigners, newKeepers, f, - encodeConfig21(config), + encodeConfig(config), newOffChainVersion, newOffChainConfig, ) @@ -4418,7 +4451,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21({ + encodeConfig({ paymentPremiumPPB, flatFeeMicroLink, checkGasLimit, @@ -4854,7 +4887,7 @@ describe('KeeperRegistry2_1', () => { signers, keepers, f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) @@ -4869,7 +4902,7 @@ describe('KeeperRegistry2_1', () => { [...signers, randomAddress()], [...keepers, newTransmitter], f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) @@ -5048,7 +5081,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21({ + encodeConfig({ paymentPremiumPPB, flatFeeMicroLink, checkGasLimit, @@ -5101,7 +5134,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21({ + encodeConfig({ paymentPremiumPPB, flatFeeMicroLink, checkGasLimit, @@ -5149,7 +5182,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses, keeperAddresses, f, - encodeConfig21({ + encodeConfig({ paymentPremiumPPB, flatFeeMicroLink, checkGasLimit, @@ -5518,7 +5551,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses.slice(2, 15), // only use 2-14th index keepers keeperAddresses.slice(2, 15), f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) @@ -5550,7 +5583,7 @@ describe('KeeperRegistry2_1', () => { signerAddresses.slice(0, 4), // only use 0-3rd index keepers keeperAddresses.slice(0, 4), f, - encodeConfig21(config), + encodeConfig(config), offchainVersion, offchainBytes, ) diff --git a/contracts/test/v0.8/automation/helpers.ts b/contracts/test/v0.8/automation/helpers.ts index 442c968d536..c6265740bd1 100644 --- a/contracts/test/v0.8/automation/helpers.ts +++ b/contracts/test/v0.8/automation/helpers.ts @@ -1,8 +1,11 @@ -import { Signer, BigNumberish } from 'ethers' +import { Signer } from 'ethers' import { ethers } from 'hardhat' import { KeeperRegistryLogicB2_1__factory as KeeperRegistryLogicBFactory } from '../../../typechain/factories/KeeperRegistryLogicB2_1__factory' import { IKeeperRegistryMaster as IKeeperRegistry } from '../../../typechain/IKeeperRegistryMaster' import { IKeeperRegistryMaster__factory as IKeeperRegistryMasterFactory } from '../../../typechain/factories/IKeeperRegistryMaster__factory' +import { AutomationUtils2_1 as AutomationUtils } from '../../../typechain/AutomationUtils2_1' + +type OnChainConfig = Parameters[0] export const deployRegistry21 = async ( from: Signer, @@ -21,25 +24,7 @@ export const deployRegistry21 = async ( return IKeeperRegistryMasterFactory.connect(master.address, from) } -export type OnchainConfig21 = { - paymentPremiumPPB: BigNumberish - flatFeeMicroLink: BigNumberish - checkGasLimit: BigNumberish - stalenessSeconds: BigNumberish - gasCeilingMultiplier: BigNumberish - minUpkeepSpend: BigNumberish - maxCheckDataSize: BigNumberish - maxPerformDataSize: BigNumberish - maxRevertDataSize: BigNumberish - maxPerformGas: BigNumberish - fallbackGasPrice: BigNumberish - fallbackLinkPrice: BigNumberish - transcoder: string - registrars: string[] - upkeepPrivilegeManager: string -} - -export const encodeConfig21 = (config: OnchainConfig21) => { +export const encodeConfig21 = (config: OnChainConfig) => { return ethers.utils.defaultAbiCoder.encode( [ 'tuple(uint32 paymentPremiumPPB,uint32 flatFeeMicroLink,uint32 checkGasLimit,uint24 stalenessSeconds\ diff --git a/core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go b/core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go new file mode 100644 index 00000000000..95d9950292c --- /dev/null +++ b/core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go @@ -0,0 +1,314 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package automation_utils_2_1 + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type KeeperRegistryBase21ConditionalTrigger struct { + BlockNum uint32 + BlockHash [32]byte +} + +type KeeperRegistryBase21ConditionalTriggerConfig struct { + CheckCadance uint32 +} + +type KeeperRegistryBase21LogTrigger struct { + TxHash [32]byte + LogIndex uint32 + BlockNum uint32 + BlockHash [32]byte +} + +type KeeperRegistryBase21LogTriggerConfig struct { + ContractAddress common.Address + FilterSelector uint8 + Topic0 [32]byte + Topic1 [32]byte + Topic2 [32]byte + Topic3 [32]byte +} + +type KeeperRegistryBase21OnchainConfig struct { + PaymentPremiumPPB uint32 + FlatFeeMicroLink uint32 + CheckGasLimit uint32 + StalenessSeconds *big.Int + GasCeilingMultiplier uint16 + MinUpkeepSpend *big.Int + MaxPerformGas uint32 + MaxCheckDataSize uint32 + MaxPerformDataSize uint32 + MaxRevertDataSize uint32 + FallbackGasPrice *big.Int + FallbackLinkPrice *big.Int + Transcoder common.Address + Registrars []common.Address + UpkeepPrivilegeManager common.Address +} + +type KeeperRegistryBase21Report struct { + FastGasWei *big.Int + LinkNative *big.Int + UpkeepIds []*big.Int + GasLimits []*big.Int + Triggers [][]byte + PerformDatas [][]byte +} + +var AutomationUtilsMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"blockNum\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.ConditionalTrigger\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_conditionalTrigger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"checkCadance\",\"type\":\"uint32\"}],\"internalType\":\"structKeeperRegistryBase2_1.ConditionalTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_conditionalTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"logIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNum\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.LogTrigger\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_logTrigger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"filterSelector\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"topic0\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic3\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.LogTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_logTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"}],\"internalType\":\"structKeeperRegistryBase2_1.OnchainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_onChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"upkeepIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"gasLimits\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"triggers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"performDatas\",\"type\":\"bytes[]\"}],\"internalType\":\"structKeeperRegistryBase2_1.Report\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_report\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610803806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806332ecf3b51161005057806332ecf3b5146100a65780634b6df294146100b4578063e65d6546146100c257600080fd5b80631c8d82601461007757806321f373d71461008a5780632ff92a8114610098575b600080fd5b6100886100853660046101b4565b50565b005b61008861008536600461024a565b6100886100853660046103b1565b61008861008536600461050b565b610088610085366004610555565b610088610085366004610709565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715610123576101236100d0565b60405290565b60405160c0810167ffffffffffffffff81118282101715610123576101236100d0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610193576101936100d0565b604052919050565b803563ffffffff811681146101af57600080fd5b919050565b6000608082840312156101c657600080fd5b6040516080810181811067ffffffffffffffff821117156101e9576101e96100d0565b604052823581526101fc6020840161019b565b602082015261020d6040840161019b565b6040820152606083013560608201528091505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101af57600080fd5b600060c0828403121561025c57600080fd5b60405160c0810181811067ffffffffffffffff8211171561027f5761027f6100d0565b60405261028b83610226565b8152602083013560ff811681146102a157600080fd5b8060208301525060408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b803562ffffff811681146101af57600080fd5b803561ffff811681146101af57600080fd5b80356bffffffffffffffffffffffff811681146101af57600080fd5b600067ffffffffffffffff821115610335576103356100d0565b5060051b60200190565b600082601f83011261035057600080fd5b813560206103656103608361031b565b61014c565b82815260059290921b8401810191818101908684111561038457600080fd5b8286015b848110156103a65761039981610226565b8352918301918301610388565b509695505050505050565b6000602082840312156103c357600080fd5b813567ffffffffffffffff808211156103db57600080fd5b908301906101e082860312156103f057600080fd5b6103f86100ff565b6104018361019b565b815261040f6020840161019b565b60208201526104206040840161019b565b6040820152610431606084016102da565b6060820152610442608084016102ed565b608082015261045360a084016102ff565b60a082015261046460c0840161019b565b60c082015261047560e0840161019b565b60e082015261010061048881850161019b565b9082015261012061049a84820161019b565b90820152610140838101359082015261016080840135908201526101806104c2818501610226565b908201526101a083810135838111156104da57600080fd5b6104e68882870161033f565b8284015250506101c091506104fc828401610226565b91810191909152949350505050565b60006020828403121561051d57600080fd5b6040516020810181811067ffffffffffffffff82111715610540576105406100d0565b60405261054c8361019b565b81529392505050565b60006040828403121561056757600080fd5b6040516040810181811067ffffffffffffffff8211171561058a5761058a6100d0565b6040526105968361019b565b8152602083013560208201528091505092915050565b600082601f8301126105bd57600080fd5b813560206105cd6103608361031b565b82815260059290921b840181019181810190868411156105ec57600080fd5b8286015b848110156103a657803583529183019183016105f0565b6000601f838184011261061957600080fd5b823560206106296103608361031b565b82815260059290921b8501810191818101908784111561064857600080fd5b8287015b848110156106fd57803567ffffffffffffffff8082111561066d5760008081fd5b818a0191508a603f8301126106825760008081fd5b85820135604082821115610698576106986100d0565b6106c7887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08c8501160161014c565b92508183528c818386010111156106de5760008081fd5b818185018985013750600090820187015284525091830191830161064c565b50979650505050505050565b60006020828403121561071b57600080fd5b813567ffffffffffffffff8082111561073357600080fd5b9083019060c0828603121561074757600080fd5b61074f610129565b823581526020830135602082015260408301358281111561076f57600080fd5b61077b878286016105ac565b60408301525060608301358281111561079357600080fd5b61079f878286016105ac565b6060830152506080830135828111156107b757600080fd5b6107c387828601610607565b60808301525060a0830135828111156107db57600080fd5b6107e787828601610607565b60a0830152509594505050505056fea164736f6c6343000810000a", +} + +var AutomationUtilsABI = AutomationUtilsMetaData.ABI + +var AutomationUtilsBin = AutomationUtilsMetaData.Bin + +func DeployAutomationUtils(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AutomationUtils, error) { + parsed, err := AutomationUtilsMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AutomationUtilsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AutomationUtils{AutomationUtilsCaller: AutomationUtilsCaller{contract: contract}, AutomationUtilsTransactor: AutomationUtilsTransactor{contract: contract}, AutomationUtilsFilterer: AutomationUtilsFilterer{contract: contract}}, nil +} + +type AutomationUtils struct { + address common.Address + abi abi.ABI + AutomationUtilsCaller + AutomationUtilsTransactor + AutomationUtilsFilterer +} + +type AutomationUtilsCaller struct { + contract *bind.BoundContract +} + +type AutomationUtilsTransactor struct { + contract *bind.BoundContract +} + +type AutomationUtilsFilterer struct { + contract *bind.BoundContract +} + +type AutomationUtilsSession struct { + Contract *AutomationUtils + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type AutomationUtilsCallerSession struct { + Contract *AutomationUtilsCaller + CallOpts bind.CallOpts +} + +type AutomationUtilsTransactorSession struct { + Contract *AutomationUtilsTransactor + TransactOpts bind.TransactOpts +} + +type AutomationUtilsRaw struct { + Contract *AutomationUtils +} + +type AutomationUtilsCallerRaw struct { + Contract *AutomationUtilsCaller +} + +type AutomationUtilsTransactorRaw struct { + Contract *AutomationUtilsTransactor +} + +func NewAutomationUtils(address common.Address, backend bind.ContractBackend) (*AutomationUtils, error) { + abi, err := abi.JSON(strings.NewReader(AutomationUtilsABI)) + if err != nil { + return nil, err + } + contract, err := bindAutomationUtils(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AutomationUtils{address: address, abi: abi, AutomationUtilsCaller: AutomationUtilsCaller{contract: contract}, AutomationUtilsTransactor: AutomationUtilsTransactor{contract: contract}, AutomationUtilsFilterer: AutomationUtilsFilterer{contract: contract}}, nil +} + +func NewAutomationUtilsCaller(address common.Address, caller bind.ContractCaller) (*AutomationUtilsCaller, error) { + contract, err := bindAutomationUtils(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AutomationUtilsCaller{contract: contract}, nil +} + +func NewAutomationUtilsTransactor(address common.Address, transactor bind.ContractTransactor) (*AutomationUtilsTransactor, error) { + contract, err := bindAutomationUtils(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AutomationUtilsTransactor{contract: contract}, nil +} + +func NewAutomationUtilsFilterer(address common.Address, filterer bind.ContractFilterer) (*AutomationUtilsFilterer, error) { + contract, err := bindAutomationUtils(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AutomationUtilsFilterer{contract: contract}, nil +} + +func bindAutomationUtils(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AutomationUtilsMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_AutomationUtils *AutomationUtilsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AutomationUtils.Contract.AutomationUtilsCaller.contract.Call(opts, result, method, params...) +} + +func (_AutomationUtils *AutomationUtilsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AutomationUtils.Contract.AutomationUtilsTransactor.contract.Transfer(opts) +} + +func (_AutomationUtils *AutomationUtilsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AutomationUtils.Contract.AutomationUtilsTransactor.contract.Transact(opts, method, params...) +} + +func (_AutomationUtils *AutomationUtilsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AutomationUtils.Contract.contract.Call(opts, result, method, params...) +} + +func (_AutomationUtils *AutomationUtilsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AutomationUtils.Contract.contract.Transfer(opts) +} + +func (_AutomationUtils *AutomationUtilsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AutomationUtils.Contract.contract.Transact(opts, method, params...) +} + +func (_AutomationUtils *AutomationUtilsTransactor) ConditionalTrigger(opts *bind.TransactOpts, arg0 KeeperRegistryBase21ConditionalTrigger) (*types.Transaction, error) { + return _AutomationUtils.contract.Transact(opts, "_conditionalTrigger", arg0) +} + +func (_AutomationUtils *AutomationUtilsSession) ConditionalTrigger(arg0 KeeperRegistryBase21ConditionalTrigger) (*types.Transaction, error) { + return _AutomationUtils.Contract.ConditionalTrigger(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactorSession) ConditionalTrigger(arg0 KeeperRegistryBase21ConditionalTrigger) (*types.Transaction, error) { + return _AutomationUtils.Contract.ConditionalTrigger(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactor) ConditionalTriggerConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21ConditionalTriggerConfig) (*types.Transaction, error) { + return _AutomationUtils.contract.Transact(opts, "_conditionalTriggerConfig", arg0) +} + +func (_AutomationUtils *AutomationUtilsSession) ConditionalTriggerConfig(arg0 KeeperRegistryBase21ConditionalTriggerConfig) (*types.Transaction, error) { + return _AutomationUtils.Contract.ConditionalTriggerConfig(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactorSession) ConditionalTriggerConfig(arg0 KeeperRegistryBase21ConditionalTriggerConfig) (*types.Transaction, error) { + return _AutomationUtils.Contract.ConditionalTriggerConfig(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactor) LogTrigger(opts *bind.TransactOpts, arg0 KeeperRegistryBase21LogTrigger) (*types.Transaction, error) { + return _AutomationUtils.contract.Transact(opts, "_logTrigger", arg0) +} + +func (_AutomationUtils *AutomationUtilsSession) LogTrigger(arg0 KeeperRegistryBase21LogTrigger) (*types.Transaction, error) { + return _AutomationUtils.Contract.LogTrigger(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactorSession) LogTrigger(arg0 KeeperRegistryBase21LogTrigger) (*types.Transaction, error) { + return _AutomationUtils.Contract.LogTrigger(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactor) LogTriggerConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21LogTriggerConfig) (*types.Transaction, error) { + return _AutomationUtils.contract.Transact(opts, "_logTriggerConfig", arg0) +} + +func (_AutomationUtils *AutomationUtilsSession) LogTriggerConfig(arg0 KeeperRegistryBase21LogTriggerConfig) (*types.Transaction, error) { + return _AutomationUtils.Contract.LogTriggerConfig(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactorSession) LogTriggerConfig(arg0 KeeperRegistryBase21LogTriggerConfig) (*types.Transaction, error) { + return _AutomationUtils.Contract.LogTriggerConfig(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactor) OnChainConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21OnchainConfig) (*types.Transaction, error) { + return _AutomationUtils.contract.Transact(opts, "_onChainConfig", arg0) +} + +func (_AutomationUtils *AutomationUtilsSession) OnChainConfig(arg0 KeeperRegistryBase21OnchainConfig) (*types.Transaction, error) { + return _AutomationUtils.Contract.OnChainConfig(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactorSession) OnChainConfig(arg0 KeeperRegistryBase21OnchainConfig) (*types.Transaction, error) { + return _AutomationUtils.Contract.OnChainConfig(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactor) Report(opts *bind.TransactOpts, arg0 KeeperRegistryBase21Report) (*types.Transaction, error) { + return _AutomationUtils.contract.Transact(opts, "_report", arg0) +} + +func (_AutomationUtils *AutomationUtilsSession) Report(arg0 KeeperRegistryBase21Report) (*types.Transaction, error) { + return _AutomationUtils.Contract.Report(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactorSession) Report(arg0 KeeperRegistryBase21Report) (*types.Transaction, error) { + return _AutomationUtils.Contract.Report(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtils) Address() common.Address { + return _AutomationUtils.address +} + +type AutomationUtilsInterface interface { + ConditionalTrigger(opts *bind.TransactOpts, arg0 KeeperRegistryBase21ConditionalTrigger) (*types.Transaction, error) + + ConditionalTriggerConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21ConditionalTriggerConfig) (*types.Transaction, error) + + LogTrigger(opts *bind.TransactOpts, arg0 KeeperRegistryBase21LogTrigger) (*types.Transaction, error) + + LogTriggerConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21LogTriggerConfig) (*types.Transaction, error) + + OnChainConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21OnchainConfig) (*types.Transaction, error) + + Report(opts *bind.TransactOpts, arg0 KeeperRegistryBase21Report) (*types.Transaction, error) + + Address() common.Address +} 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 88c8df59b1d..ec9dea3853b 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 @@ -4,6 +4,7 @@ aggregator_v3_interface: ../../contracts/solc/v0.8.6/AggregatorV3Interface.abi . authorized_forwarder: ../../contracts/solc/v0.7/AuthorizedForwarder.abi ../../contracts/solc/v0.7/AuthorizedForwarder.bin 426d0866a294c77b27a526265f98c688326eb3dec3b7a698180c5f1921ebdf56 authorized_receiver: ../../contracts/solc/v0.7/AuthorizedReceiver.abi ../../contracts/solc/v0.7/AuthorizedReceiver.bin 18e8969ba3234b027e1b16c11a783aca58d0ea5c2361010ec597f134b7bf1c4f automation_consumer_benchmark: ../../contracts/solc/v0.8.16/AutomationConsumerBenchmark.abi ../../contracts/solc/v0.8.16/AutomationConsumerBenchmark.bin f52c76f1aaed4be541d82d97189d70f5aa027fc9838037dd7a7d21910c8c488e +automation_utils_2_1: ../../contracts/solc/v0.8.16/AutomationUtils2_1.abi ../../contracts/solc/v0.8.16/AutomationUtils2_1.bin 5388642ae1f73e718eee2b23f725495f1f2dffbc37f0b61c0befd2aa6d14bfc7 batch_blockhash_store: ../../contracts/solc/v0.8.6/BatchBlockhashStore.abi ../../contracts/solc/v0.8.6/BatchBlockhashStore.bin c5ab26709a01050402615659403f32d5cd1b85f3ad6bb6bfe021692f4233cf19 batch_vrf_coordinator_v2: ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2.abi ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2.bin d0a54963260d8c1f1bbd984b758285e6027cfb5a7e42701bcb562ab123219332 blockhash_store: ../../contracts/solc/v0.6/BlockhashStore.abi ../../contracts/solc/v0.6/BlockhashStore.bin a0dc60bcc4bf071033d23fddf7ae936c6a4d1dd81488434b7e24b7aa1fabc37c diff --git a/core/gethwrappers/go_generate.go b/core/gethwrappers/go_generate.go index 773c9130848..f5f172d2030 100644 --- a/core/gethwrappers/go_generate.go +++ b/core/gethwrappers/go_generate.go @@ -54,6 +54,7 @@ package gethwrappers //go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.16/KeeperRegistryLogicB2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistryLogicB2_1.bin KeeperRegistryLogicB keeper_registry_logic_b_wrapper_2_1 //go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.16/IKeeperRegistryMaster.abi ../../contracts/solc/v0.8.16/IKeeperRegistryMaster.bin IKeeperRegistryMaster i_keeper_registry_master_wrapper_2_1 //go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.16/ILogAutomation.abi ../../contracts/solc/v0.8.16/ILogAutomation.bin ILogAutomation i_log_automation +//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.16/AutomationUtils2_1.abi ../../contracts/solc/v0.8.16/AutomationUtils2_1.bin AutomationUtils automation_utils_2_1 //go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/LogUpkeepCounter.abi ../../contracts/solc/v0.8.6/LogUpkeepCounter.bin LogUpkeepCounter log_upkeep_counter_wrapper // v0.8.6 VRFConsumer From cdc829e9abcf84f3231d7068a70cc456ac9e9836 Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Thu, 29 Jun 2023 19:09:15 -0400 Subject: [PATCH 2/4] use report struct as rawReport bytes --- .../dev/automation/2_1/KeeperRegistry2_1.sol | 28 +++++-------------- .../v0.8/automation/KeeperRegistry2_1.test.ts | 18 ++---------- 2 files changed, 10 insertions(+), 36 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 bd870aae42f..d85a4b35e62 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 @@ -384,31 +384,17 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER /** * @dev _decodeReport decodes a serialized report into a Report struct */ - function _decodeReport(bytes memory rawReport) internal pure returns (Report memory) { - ( - uint256 fastGasWei, - uint256 linkNative, - uint256[] memory upkeepIds, - uint256[] memory gasLimits, - bytes[] memory triggers, - bytes[] memory performDatas - ) = abi.decode(rawReport, (uint256, uint256, uint256[], uint256[], bytes[], bytes[])); + function _decodeReport(bytes calldata rawReport) internal pure returns (Report memory) { + Report memory report = abi.decode(rawReport, (Report)); + uint256 expectedLength = report.upkeepIds.length; if ( - upkeepIds.length != gasLimits.length || - upkeepIds.length != triggers.length || - upkeepIds.length != performDatas.length + report.gasLimits.length != expectedLength || + report.triggers.length != expectedLength || + report.performDatas.length != expectedLength ) { revert InvalidReport(); } - return - Report({ - fastGasWei: fastGasWei, - linkNative: linkNative, - upkeepIds: upkeepIds, - gasLimits: gasLimits, - triggers: triggers, - performDatas: performDatas - }); + return report; } /** diff --git a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts index 2b01add1b21..c3a61e97f8a 100644 --- a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts +++ b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts @@ -220,21 +220,9 @@ const encodeLogTrigger = (logTrigger: LogTrigger) => { } const encodeReport = (report: Report) => { - // TODO - we should update the report bytes to match the struct - // return ( - // '0x' + - // automationUtils.interface.encodeFunctionData('_report', [report]).slice(10) - // ) - return ethers.utils.defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256[]', 'uint256[]', 'bytes[]', 'bytes[]'], - [ - report.fastGasWei, - report.linkNative, - report.upkeepIds, - report.gasLimits, - report.triggers, - report.performDatas, - ], + return ( + '0x' + + automationUtils.interface.encodeFunctionData('_report', [report]).slice(10) ) } From 198b74df332f1eb6bf51d02dc3390b1bb653d9cb Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Thu, 29 Jun 2023 19:17:19 -0400 Subject: [PATCH 3/4] update wrappers --- .../keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 19db49e14b0..aff67c70629 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: "0x6101206040523480156200001257600080fd5b5060405162004f8738038062004f87833981016040819052620000359162000374565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200039b565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000100919062000374565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000165919062000374565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca919062000374565b3380600081620002215760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b038481169190911790915581161562000254576200025481620002b0565b5050508360028111156200026c576200026c620003be565b60e0816002811115620002835762000283620003be565b9052506001600160a01b0392831660805290821660a052811660c052919091166101005250620003d49050565b336001600160a01b038216036200030a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000218565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200037157600080fd5b50565b6000602082840312156200038757600080fd5b815162000394816200035b565b9392505050565b600060208284031215620003ae57600080fd5b8151600381106200039457600080fd5b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e05161010051614b446200044360003960008181610102015261019b0152600081816101e201528181612e260152818161318c0152818161331f015261393301526000610230015260006103770152600081816103b001526105bf0152614b446000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a4c0ed3611610097578063b1dc65a411610066578063b1dc65a41461039b578063ca30e603146103ae578063e3d0e712146103d4578063f2fde38b146103e757610100565b8063a4c0ed36146102ef578063aed2e92914610302578063afcb95d71461032c578063b10b673c1461037557610100565b80636709d0e5116100d35780636709d0e51461022e57806379ba50971461025457806381ff70481461025c5780638da5cb5b146102d157610100565b8063181f5a7714610147578063349e8cca146101995780634b4fd03b146101e05780635147cd591461020e575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610140573d6000f35b3d6000fd5b005b6101836040518060400160405280601481526020017f4b6565706572526567697374727920322e312e3000000000000000000000000081525081565b6040516101909190613bb2565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b7f00000000000000000000000000000000000000000000000000000000000000006040516101909190613bf4565b61022161021c366004613c0e565b6103fa565b6040516101909190613c27565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456104a5565b6102ae60145460115463ffffffff780100000000000000000000000000000000000000000000000083048116937c01000000000000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610190565b60005473ffffffffffffffffffffffffffffffffffffffff166101bb565b6101456102fd366004613ca6565b6105a7565b610315610310366004613d02565b6107c3565b604080519215158352602083019190915201610190565b601154601254604080516000815260208101939093527c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690820152606001610190565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103a9366004613d93565b610939565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103e236600461404a565b6114e6565b6101456103f5366004614117565b6122c5565b6000818160045b600f811015610487577fff00000000000000000000000000000000000000000000000000000000000000821683826020811061043f5761043f614134565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461047557506000949350505050565b8061047f81614192565b915050610401565b5081600f1a600181111561049d5761049d613bc5565b949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461052b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610616576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208114610650576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065e82840184613c0e565b60008181526004602052604090205490915065010000000000900463ffffffff908116146106b8576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600101546106f39085906c0100000000000000000000000090046bffffffffffffffffffffffff166141ca565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff90921691909117905560185461075e9085906141ef565b6018556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b6000806107ce6122d9565b6012546e010000000000000000000000000000900460ff161561081d576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526004602090815260409182902082516101008082018552825460ff81161515835263ffffffff918104821683860181905265010000000000820483168488015273ffffffffffffffffffffffffffffffffffffffff690100000000000000000090920482166060850181905260018601546bffffffffffffffffffffffff80821660808801526c0100000000000000000000000082041660a08701527801000000000000000000000000000000000000000000000000900490931660c08501526002909401541660e08301528451601f8901859004850281018501909552878552909361092c93919291899089908190840183828082843760009201919091525061231392505050565b9097909650945050505050565b60005a604080516101208101825260125460ff808216835261010080830463ffffffff90811660208601526501000000000084048116958501959095526901000000000000000000830462ffffff1660608501526c01000000000000000000000000830461ffff1660808501526e0100000000000000000000000000008304821615801560a08601526f010000000000000000000000000000008404909216151560c085015270010000000000000000000000000000000083046bffffffffffffffffffffffff1660e08501527c010000000000000000000000000000000000000000000000000000000090920490931690820152919250610a67576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff16610ab0576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6011548a3514610aec576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610af9906001614202565b60ff1686141580610b0a5750858414155b15610b41576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b518a8a8a8a8a8a8a8a612515565b6000610b928a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277e92505050565b9050600081604001515167ffffffffffffffff811115610bb457610bb4613e4a565b604051908082528060200260200182016040528015610c7857816020015b604080516101e081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610bd25790505b5090506000805b8360400151518110156110f6576004600085604001518381518110610ca657610ca6614134565b602090810291909101810151825281810192909252604090810160002081516101008082018452825460ff81161515835263ffffffff91810482169583019590955265010000000000850481169382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009094048416606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490921660c08301526002015490911660e08201528351849083908110610d9857610d98614134565b602002602001015160000181905250610dcd84604001518281518110610dc057610dc0614134565b60200260200101516103fa565b838281518110610ddf57610ddf614134565b6020026020010151608001906001811115610dfc57610dfc613bc5565b90816001811115610e0f57610e0f613bc5565b81525050610e8785848381518110610e2957610e29614134565b602002602001015160800151858481518110610e4757610e47614134565b602002602001015160000151602001518760a001518581518110610e6d57610e6d614134565b602002602001015151886000015189602001516001612868565b838281518110610e9957610e99614134565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050610f6584604001518281518110610ee057610ee0614134565b6020026020010151848381518110610efa57610efa614134565b60200260200101516080015186608001518481518110610f1c57610f1c614134565b6020026020010151868581518110610f3657610f36614134565b602002602001015160000151878681518110610f5457610f54614134565b6020026020010151604001516128b3565b838281518110610f7757610f77614134565b60200260200101516020019015159081151581525050828181518110610f9f57610f9f614134565b60200260200101516020015115610fc257610fbb60018361421b565b9150610fc7565b6110e4565b61102d838281518110610fdc57610fdc614134565b602002602001015160000151606001518560600151838151811061100257611002614134565b60200260200101518660a00151848151811061102057611020614134565b6020026020010151612313565b84838151811061103f5761103f614134565b602002602001015160600185848151811061105c5761105c614134565b602002602001015160a001828152508215151515815250505082818151811061108757611087614134565b602002602001015160a001518661109e9190614236565b95506110e4846040015182815181106110b9576110b9614134565b60200260200101518483815181106110d3576110d3614134565b6020026020010151608001516129fb565b806110ee81614192565b915050610c7f565b508061ffff1660000361110d5750505050506114dc565b835161111a906001614202565b6111299060ff1661044c614249565b616b6c6111378d6010614249565b5a6111429089614236565b61114c91906141ef565b61115691906141ef565b61116091906141ef565b9450611b5861117361ffff8316876142b5565b61117d91906141ef565b945060008060008060005b87604001515181101561137e578681815181106111a7576111a7614134565b6020026020010151602001511561136c576112038a8883815181106111ce576111ce614134565b6020026020010151608001518a60a0015184815181106111f0576111f0614134565b6020026020010151518c60000151612a82565b87828151811061121557611215614134565b602002602001015160c0018181525050611271898960400151838151811061123f5761123f614134565b602002602001015189848151811061125957611259614134565b60200260200101518b600001518c602001518b612aa2565b909350915061128082856141ca565b935061128c83866141ca565b94508681815181106112a0576112a0614134565b6020026020010151606001511515886040015182815181106112c4576112c4614134565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b84866112f991906141ca565b8a858151811061130b5761130b614134565b602002602001015160a001518b868151811061132957611329614134565b602002602001015160c001518d60800151878151811061134b5761134b614134565b602002602001015160405161136394939291906142c9565b60405180910390a35b8061137681614192565b915050611188565b5050336000908152600b6020526040902080548492506002906113b69084906201000090046bffffffffffffffffffffffff166141ca565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080601260000160108282829054906101000a90046bffffffffffffffffffffffff1661141091906141ca565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060008f60016003811061145357611453614134565b602002013560001c9050600060088264ffffffffff16901c905087610100015163ffffffff168163ffffffff1611156114d257601280547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416021790555b5050505050505050505b5050505050505050565b6114ee612b95565b601f8651111561152a576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360ff16600003611567576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84518651141580611586575061157e846003614306565b60ff16865111155b156115bd576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e547001000000000000000000000000000000009091046bffffffffffffffffffffffff169060005b816bffffffffffffffffffffffff168110156116525761163f600e828154811061161657611616614134565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168484612c16565b508061164a81614192565b9150506115ea565b5060008060005b836bffffffffffffffffffffffff1681101561175b57600d818154811061168257611682614134565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff909216945090829081106116bd576116bd614134565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591508061175381614192565b915050611659565b50611768600d6000613a87565b611774600e6000613a87565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c51811015611af857600c60008e83815181106117b9576117b9614134565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615611824576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c60008f848151811061185557611855614134565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c90829081106118fd576118fd614134565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600b83526040908190208151608081018352905460ff80821615801584526101008304909116958301959095526bffffffffffffffffffffffff6201000082048116938301939093526e01000000000000000000000000000090049091166060820152945092506119c2576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff87166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009095169490941717919091169290921791909117905580611af081614192565b91505061179a565b50508a51611b0e9150600d9060208d0190613aa5565b508851611b2290600e9060208c0190613aa5565b50600087806020019051810190611b3991906143f3565b90506040518061012001604052808a60ff168152602001826000015163ffffffff168152602001826020015163ffffffff168152602001826060015162ffffff168152602001826080015161ffff1681526020016012600001600e9054906101000a900460ff16151581526020016012600001600f9054906101000a900460ff1615158152602001866bffffffffffffffffffffffff168152602001600063ffffffff16815250601260008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160096101000a81548162ffffff021916908362ffffff160217905550608082015181600001600c6101000a81548161ffff021916908361ffff16021790555060a082015181600001600e6101000a81548160ff02191690831515021790555060c082015181600001600f6101000a81548160ff02191690831515021790555060e08201518160000160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061010082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050506040518061018001604052808260a001516bffffffffffffffffffffffff16815260200182610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601360010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001826040015163ffffffff1681526020018260c0015163ffffffff168152602001601360010160149054906101000a900463ffffffff1663ffffffff168152602001601360010160189054906101000a900463ffffffff1663ffffffff1681526020016013600101601c9054906101000a900463ffffffff1663ffffffff1681526020018260e0015163ffffffff16815260200182610100015163ffffffff16815260200182610120015163ffffffff168152602001826101c0015173ffffffffffffffffffffffffffffffffffffffff16815250601360008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555061016082015181600201600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505080610140015160168190555080610160015160178190555060006013600101601c9054906101000a900463ffffffff1690506120fc612e20565b601480547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff9384160217808255600192601891612177918591780100000000000000000000000000000000000000000000000090041661454d565b92506101000a81548163ffffffff021916908363ffffffff1602179055506121c14630601360010160189054906101000a900463ffffffff1663ffffffff168f8f8f8f8f8f612ed5565b60115560005b6121d16009612f7f565b811015612201576121ee6121e6600983612f8f565b600990612f9b565b50806121f981614192565b9150506121c7565b5060005b826101a001515181101561225857612245836101a00151828151811061222d5761222d614134565b60200260200101516009612fbd90919063ffffffff16565b508061225081614192565b915050612205565b507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581601154601360010160189054906101000a900463ffffffff168f8f8f8f8f8f6040516122af999897969594939291906145bb565b60405180910390a1505050505050505050505050565b6122cd612b95565b6122d681612fdf565b50565b3215612311576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60125460009081906f01000000000000000000000000000000900460ff1615612368576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f010000000000000000000000000000001790555a9050634585e33b60e01b836040516024016123be9190613bb2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d16906124919087908790600401614651565b6020604051808303816000875af11580156124b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d4919061466a565b91505a6124e19082614236565b9050601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1690559094909350915050565b6000878760405161252792919061468c565b60405190819003812061253e918b9060200161469c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b88811015612715576001858783602081106125aa576125aa614134565b6125b791901a601b614202565b8c8c858181106125c9576125c9614134565b905060200201358b8b868181106125e2576125e2614134565b905060200201356040516000815260200160405260405161261f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612641573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506126ef576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b84019350808061270d90614192565b91505061258d565b50827e01010101010101010101010101010101010101010101010101010101010101841614612770576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b6127b76040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600080600080600080878060200190518101906127d491906147c9565b955095509550955095509550825184511415806127f357508151845114155b8061280057508051845114155b15612837576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810182529687526020870195909552938501929092526060840152608083015260a082015292915050565b60008061287a88878b600001516130d4565b90506000806128958b8a63ffffffff16858a8a60018b613157565b90925090506128a481836141ca565b9b9a5050505050505050505050565b6000808560018111156128c8576128c8613bc5565b036128e9576128d8868585613502565b6128e4575060006129f2565b61293e565b60018560018111156128fd576128fd613bc5565b0361290c576128d886856135f5565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612946612e20565b836040015163ffffffff161161299657857fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd5636856040516129869190613bb2565b60405180910390a25060006129f2565b816bffffffffffffffffffffffff168360a001516bffffffffffffffffffffffff1610156129ee57857f377c8b0c126ae5248d27aca1c76fac4608aff85673ee3caf09747e1044549e02856040516129869190613bb2565b5060015b95945050505050565b6000816001811115612a0f57612a0f613bc5565b03612a7e57612a1c612e20565b6000838152600460205260409020600101805463ffffffff929092167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790555b5050565b6000612a8f8484846130d4565b90508085101561049d5750929392505050565b600080612abd888760a001518860c001518888886001613157565b90925090506000612ace82846141ca565b600089815260046020526040902060010180549192508291600c90612b129084906c0100000000000000000000000090046bffffffffffffffffffffffff1661487b565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a815260046020526040812060010180548594509092612b5b918591166141ca565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610522565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015290612e12576000816060015185612cae919061487b565b90506000612cbc85836148a0565b90508083604001818151612cd091906141ca565b6bffffffffffffffffffffffff16905250612ceb85826148cb565b83606001818151612cfc91906141ca565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b6040015190505b9392505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115612e5657612e56613bc5565b03612ed057606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecb91906148ff565b905090565b504390565b6000808a8a8a8a8a8a8a8a8a604051602001612ef999989796959493929190614918565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b6000612f89825490565b92915050565b6000612e1983836137ba565b6000612e198373ffffffffffffffffffffffffffffffffffffffff84166137e4565b6000612e198373ffffffffffffffffffffffffffffffffffffffff84166138de565b3373ffffffffffffffffffffffffffffffffffffffff82160361305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610522565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600080808560018111156130ea576130ea613bc5565b036130f9575062013880613118565b600185600181111561310d5761310d613bc5565b0361290c5750620186a05b61312963ffffffff85166014614249565b613134846001614202565b6131439060ff16611d4c614249565b61314d90836141ef565b6129f291906141ef565b6000806000896080015161ffff16876131709190614249565b905083801561317e5750803a105b1561318657503a5b600060027f000000000000000000000000000000000000000000000000000000000000000060028111156131bc576131bc613bc5565b0361331b57604080516000815260208101909152851561321a57600036604051806080016040528060488152602001614af060489139604051602001613204939291906149ad565b6040516020818303038152906040529050613282565b60155461323690640100000000900463ffffffff1660046149d4565b63ffffffff1667ffffffffffffffff81111561325457613254613e4a565b6040519080825280601f01601f19166020018201604052801561327e576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e906132d2908490600401613bb2565b602060405180830381865afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331391906148ff565b9150506133c7565b60017f0000000000000000000000000000000000000000000000000000000000000000600281111561334f5761334f613bc5565b036133c757606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c491906148ff565b90505b846133e357808b6080015161ffff166133e09190614249565b90505b6133f161ffff8716826142b5565b9050600087826134018c8e6141ef565b61340b9086614249565b61341591906141ef565b61342790670de0b6b3a7640000614249565b61343191906142b5565b905060008c6040015163ffffffff1664e8d4a510006134509190614249565b898e6020015163ffffffff16858f886134699190614249565b61347391906141ef565b61348190633b9aca00614249565b61348b9190614249565b61349591906142b5565b61349f91906141ef565b90506b033b2e3c9fd0803ce80000006134b882846141ef565b11156134f0576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b6000808380602001905181019061351991906149f7565b90508260c0015163ffffffff16816000015163ffffffff16101561357957847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516135679190613bb2565b60405180910390a26000915050612e19565b6020810151158015906135a057506020810151815161359d9063ffffffff1661392d565b14155b806135b5575043816000015163ffffffff1610155b156135ea57847f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301856040516135679190613bb2565b506001949350505050565b6000808280602001905181019061360c9190614a4e565b60608101519091501580159061363857508060600151613635826040015163ffffffff1661392d565b14155b8061364d575043816040015163ffffffff1610155b1561369457837f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301846040516136829190613bb2565b60405180910390a26000915050612f89565b80516020808301516040516000936136e6938993919201928352602083019190915260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016604082015260440190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600890935291205490915060ff161561377757847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516137649190613bb2565b60405180910390a2600092505050612f89565b600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505092915050565b60008260000182815481106137d1576137d1614134565b9060005260206000200154905092915050565b600081815260018301602052604081205480156138cd576000613808600183614236565b855490915060009061381c90600190614236565b905081811461388157600086600001828154811061383c5761383c614134565b906000526020600020015490508087600001848154811061385f5761385f614134565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061389257613892614ac0565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612f89565b6000915050612f89565b5092915050565b600081815260018301602052604081205461392557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612f89565b506000612f89565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111561396357613963613bc5565b03613a7d576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139da91906148ff565b905080831015806139f557506101006139f38483614236565b115b15613a035750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a8290602401602060405180830381865afa158015613a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1991906148ff565b504090565b919050565b50805460008255906000526020600020908101906122d69190613b2f565b828054828255906000526020600020908101928215613b1f579160200282015b82811115613b1f57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613ac5565b50613b2b929150613b2f565b5090565b5b80821115613b2b5760008155600101613b30565b60005b83811015613b5f578181015183820152602001613b47565b50506000910152565b60008151808452613b80816020860160208601613b44565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612e196020830184613b68565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613c0857613c08613bc5565b91905290565b600060208284031215613c2057600080fd5b5035919050565b6020810160028310613c0857613c08613bc5565b73ffffffffffffffffffffffffffffffffffffffff811681146122d657600080fd5b60008083601f840112613c6f57600080fd5b50813567ffffffffffffffff811115613c8757600080fd5b602083019150836020828501011115613c9f57600080fd5b9250929050565b60008060008060608587031215613cbc57600080fd5b8435613cc781613c3b565b935060208501359250604085013567ffffffffffffffff811115613cea57600080fd5b613cf687828801613c5d565b95989497509550505050565b600080600060408486031215613d1757600080fd5b83359250602084013567ffffffffffffffff811115613d3557600080fd5b613d4186828701613c5d565b9497909650939450505050565b60008083601f840112613d6057600080fd5b50813567ffffffffffffffff811115613d7857600080fd5b6020830191508360208260051b8501011115613c9f57600080fd5b60008060008060008060008060e0898b031215613daf57600080fd5b606089018a811115613dc057600080fd5b8998503567ffffffffffffffff80821115613dda57600080fd5b613de68c838d01613c5d565b909950975060808b0135915080821115613dff57600080fd5b613e0b8c838d01613d4e565b909750955060a08b0135915080821115613e2457600080fd5b50613e318b828c01613d4e565b999c989b50969995989497949560c00135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715613e9d57613e9d613e4a565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613eea57613eea613e4a565b604052919050565b600067ffffffffffffffff821115613f0c57613f0c613e4a565b5060051b60200190565b600082601f830112613f2757600080fd5b81356020613f3c613f3783613ef2565b613ea3565b82815260059290921b84018101918181019086841115613f5b57600080fd5b8286015b84811015613f7f578035613f7281613c3b565b8352918301918301613f5f565b509695505050505050565b803560ff81168114613a8257600080fd5b600067ffffffffffffffff821115613fb557613fb5613e4a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613ff257600080fd5b8135614000613f3782613f9b565b81815284602083860101111561401557600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613a8257600080fd5b60008060008060008060c0878903121561406357600080fd5b863567ffffffffffffffff8082111561407b57600080fd5b6140878a838b01613f16565b9750602089013591508082111561409d57600080fd5b6140a98a838b01613f16565b96506140b760408a01613f8a565b955060608901359150808211156140cd57600080fd5b6140d98a838b01613fe1565b94506140e760808a01614032565b935060a08901359150808211156140fd57600080fd5b5061410a89828a01613fe1565b9150509295509295509295565b60006020828403121561412957600080fd5b8135612e1981613c3b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141c3576141c3614163565b5060010190565b6bffffffffffffffffffffffff8181168382160190808211156138d7576138d7614163565b80820180821115612f8957612f89614163565b60ff8181168382160190811115612f8957612f89614163565b61ffff8181168382160190808211156138d7576138d7614163565b81810381811115612f8957612f89614163565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561428157614281614163565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826142c4576142c4614286565b500490565b6bffffffffffffffffffffffff851681528360208201528260408201526080606082015260006142fc6080830184613b68565b9695505050505050565b600060ff821660ff84168160ff048111821515161561432757614327614163565b029392505050565b805163ffffffff81168114613a8257600080fd5b805162ffffff81168114613a8257600080fd5b805161ffff81168114613a8257600080fd5b80516bffffffffffffffffffffffff81168114613a8257600080fd5b8051613a8281613c3b565b600082601f8301126143a057600080fd5b815160206143b0613f3783613ef2565b82815260059290921b840181019181810190868411156143cf57600080fd5b8286015b84811015613f7f5780516143e681613c3b565b83529183019183016143d3565b60006020828403121561440557600080fd5b815167ffffffffffffffff8082111561441d57600080fd5b908301906101e0828603121561443257600080fd5b61443a613e79565b6144438361432f565b81526144516020840161432f565b60208201526144626040840161432f565b604082015261447360608401614343565b606082015261448460808401614356565b608082015261449560a08401614368565b60a08201526144a660c0840161432f565b60c08201526144b760e0840161432f565b60e08201526101006144ca81850161432f565b908201526101206144dc84820161432f565b9082015261014083810151908201526101608084015190820152610180614504818501614384565b908201526101a0838101518381111561451c57600080fd5b6145288882870161438f565b8284015250506101c0915061453e828401614384565b91810191909152949350505050565b63ffffffff8181168382160190808211156138d7576138d7614163565b600081518084526020808501945080840160005b838110156145b057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161457e565b509495945050505050565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526145eb8184018a61456a565b905082810360808401526145ff818961456a565b905060ff871660a084015282810360c084015261461c8187613b68565b905067ffffffffffffffff851660e08401528281036101008401526146418185613b68565b9c9b505050505050505050505050565b82815260406020820152600061049d6040830184613b68565b60006020828403121561467c57600080fd5b81518015158114612e1957600080fd5b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f8301126146c357600080fd5b815160206146d3613f3783613ef2565b82815260059290921b840181019181810190868411156146f257600080fd5b8286015b84811015613f7f57805183529183019183016146f6565b600082601f83011261471e57600080fd5b8151602061472e613f3783613ef2565b82815260059290921b8401810191818101908684111561474d57600080fd5b8286015b84811015613f7f57805167ffffffffffffffff8111156147715760008081fd5b8701603f810189136147835760008081fd5b848101516040614795613f3783613f9b565b8281528b828486010111156147aa5760008081fd5b6147b983898301848701613b44565b8652505050918301918301614751565b60008060008060008060c087890312156147e257600080fd5b8651955060208701519450604087015167ffffffffffffffff8082111561480857600080fd5b6148148a838b016146b2565b9550606089015191508082111561482a57600080fd5b6148368a838b016146b2565b9450608089015191508082111561484c57600080fd5b6148588a838b0161470d565b935060a089015191508082111561486e57600080fd5b5061410a89828a0161470d565b6bffffffffffffffffffffffff8281168282160390808211156138d7576138d7614163565b60006bffffffffffffffffffffffff808416806148bf576148bf614286565b92169190910492915050565b60006bffffffffffffffffffffffff808316818516818304811182151516156148f6576148f6614163565b02949350505050565b60006020828403121561491157600080fd5b5051919050565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b16604085015281606085015261495f8285018b61456a565b91508382036080850152614973828a61456a565b915060ff881660a085015283820360c08501526149908288613b68565b90861660e085015283810361010085015290506146418185613b68565b8284823760008382016000815283516149ca818360208801613b44565b0195945050505050565b600063ffffffff808316818516818304811182151516156148f6576148f6614163565b600060408284031215614a0957600080fd5b6040516040810181811067ffffffffffffffff82111715614a2c57614a2c613e4a565b604052614a388361432f565b8152602083015160208201528091505092915050565b600060808284031215614a6057600080fd5b6040516080810181811067ffffffffffffffff82111715614a8357614a83613e4a565b60405282518152614a966020840161432f565b6020820152614aa76040840161432f565b6040820152606083015160608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000810000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162004f3638038062004f36833981016040819052620000359162000374565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200039b565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000100919062000374565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000165919062000374565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca919062000374565b3380600081620002215760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b038481169190911790915581161562000254576200025481620002b0565b5050508360028111156200026c576200026c620003be565b60e0816002811115620002835762000283620003be565b9052506001600160a01b0392831660805290821660a052811660c052919091166101005250620003d49050565b336001600160a01b038216036200030a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000218565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200037157600080fd5b50565b6000602082840312156200038757600080fd5b815162000394816200035b565b9392505050565b600060208284031215620003ae57600080fd5b8151600381106200039457600080fd5b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e05161010051614af36200044360003960008181610102015261019b0152600081816101e201528181612dc201528181613122015281816132b501526138c901526000610230015260006103770152600081816103b001526105bf0152614af36000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a4c0ed3611610097578063b1dc65a411610066578063b1dc65a41461039b578063ca30e603146103ae578063e3d0e712146103d4578063f2fde38b146103e757610100565b8063a4c0ed36146102ef578063aed2e92914610302578063afcb95d71461032c578063b10b673c1461037557610100565b80636709d0e5116100d35780636709d0e51461022e57806379ba50971461025457806381ff70481461025c5780638da5cb5b146102d157610100565b8063181f5a7714610147578063349e8cca146101995780634b4fd03b146101e05780635147cd591461020e575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610140573d6000f35b3d6000fd5b005b6101836040518060400160405280601481526020017f4b6565706572526567697374727920322e312e3000000000000000000000000081525081565b6040516101909190613b48565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b7f00000000000000000000000000000000000000000000000000000000000000006040516101909190613b8a565b61022161021c366004613ba4565b6103fa565b6040516101909190613bbd565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456104a5565b6102ae60145460115463ffffffff780100000000000000000000000000000000000000000000000083048116937c01000000000000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610190565b60005473ffffffffffffffffffffffffffffffffffffffff166101bb565b6101456102fd366004613c3c565b6105a7565b610315610310366004613c98565b6107c3565b604080519215158352602083019190915201610190565b601154601254604080516000815260208101939093527c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690820152606001610190565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103a9366004613d29565b610939565b7f00000000000000000000000000000000000000000000000000000000000000006101bb565b6101456103e2366004613ffa565b6114b1565b6101456103f53660046140c7565b612290565b6000818160045b600f811015610487577fff00000000000000000000000000000000000000000000000000000000000000821683826020811061043f5761043f6140e4565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461047557506000949350505050565b8061047f81614142565b915050610401565b5081600f1a600181111561049d5761049d613b5b565b949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461052b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610616576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208114610650576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065e82840184613ba4565b60008181526004602052604090205490915065010000000000900463ffffffff908116146106b8576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600101546106f39085906c0100000000000000000000000090046bffffffffffffffffffffffff1661417a565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff90921691909117905560185461075e90859061419f565b6018556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b6000806107ce6122a4565b6012546e010000000000000000000000000000900460ff161561081d576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526004602090815260409182902082516101008082018552825460ff81161515835263ffffffff918104821683860181905265010000000000820483168488015273ffffffffffffffffffffffffffffffffffffffff690100000000000000000090920482166060850181905260018601546bffffffffffffffffffffffff80821660808801526c0100000000000000000000000082041660a08701527801000000000000000000000000000000000000000000000000900490931660c08501526002909401541660e08301528451601f8901859004850281018501909552878552909361092c9391929189908990819084018382808284376000920191909152506122de92505050565b9097909650945050505050565b60005a604080516101208101825260125460ff808216835261010080830463ffffffff90811660208601526501000000000084048116958501959095526901000000000000000000830462ffffff1660608501526c01000000000000000000000000830461ffff1660808501526e0100000000000000000000000000008304821615801560a08601526f010000000000000000000000000000008404909216151560c085015270010000000000000000000000000000000083046bffffffffffffffffffffffff1660e08501527c010000000000000000000000000000000000000000000000000000000090920490931690820152919250610a67576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff16610ab0576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6011548a3514610aec576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610af99060016141b2565b60ff1686141580610b0a5750858414155b15610b41576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b518a8a8a8a8a8a8a8a6124e0565b6000610b5d8a8a612749565b9050600081604001515167ffffffffffffffff811115610b7f57610b7f613de0565b604051908082528060200260200182016040528015610c4357816020015b604080516101e081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610b9d5790505b5090506000805b8360400151518110156110c1576004600085604001518381518110610c7157610c716140e4565b602090810291909101810151825281810192909252604090810160002081516101008082018452825460ff81161515835263ffffffff91810482169583019590955265010000000000850481169382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009094048416606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490921660c08301526002015490911660e08201528351849083908110610d6357610d636140e4565b602002602001015160000181905250610d9884604001518281518110610d8b57610d8b6140e4565b60200260200101516103fa565b838281518110610daa57610daa6140e4565b6020026020010151608001906001811115610dc757610dc7613b5b565b90816001811115610dda57610dda613b5b565b81525050610e5285848381518110610df457610df46140e4565b602002602001015160800151858481518110610e1257610e126140e4565b602002602001015160000151602001518760a001518581518110610e3857610e386140e4565b602002602001015151886000015189602001516001612804565b838281518110610e6457610e646140e4565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050610f3084604001518281518110610eab57610eab6140e4565b6020026020010151848381518110610ec557610ec56140e4565b60200260200101516080015186608001518481518110610ee757610ee76140e4565b6020026020010151868581518110610f0157610f016140e4565b602002602001015160000151878681518110610f1f57610f1f6140e4565b60200260200101516040015161284f565b838281518110610f4257610f426140e4565b60200260200101516020019015159081151581525050828181518110610f6a57610f6a6140e4565b60200260200101516020015115610f8d57610f866001836141cb565b9150610f92565b6110af565b610ff8838281518110610fa757610fa76140e4565b6020026020010151600001516060015185606001518381518110610fcd57610fcd6140e4565b60200260200101518660a001518481518110610feb57610feb6140e4565b60200260200101516122de565b84838151811061100a5761100a6140e4565b6020026020010151606001858481518110611027576110276140e4565b602002602001015160a0018281525082151515158152505050828181518110611052576110526140e4565b602002602001015160a001518661106991906141e6565b95506110af84604001518281518110611084576110846140e4565b602002602001015184838151811061109e5761109e6140e4565b602002602001015160800151612997565b806110b981614142565b915050610c4a565b508061ffff166000036110d85750505050506114a7565b83516110e59060016141b2565b6110f49060ff1661044c6141f9565b616b6c6111028d60106141f9565b5a61110d90896141e6565b611117919061419f565b611121919061419f565b61112b919061419f565b9450611b5861113e61ffff831687614265565b611148919061419f565b945060008060008060005b87604001515181101561134957868181518110611172576111726140e4565b60200260200101516020015115611337576111ce8a888381518110611199576111996140e4565b6020026020010151608001518a60a0015184815181106111bb576111bb6140e4565b6020026020010151518c60000151612a1e565b8782815181106111e0576111e06140e4565b602002602001015160c001818152505061123c898960400151838151811061120a5761120a6140e4565b6020026020010151898481518110611224576112246140e4565b60200260200101518b600001518c602001518b612a3e565b909350915061124b828561417a565b9350611257838661417a565b945086818151811061126b5761126b6140e4565b60200260200101516060015115158860400151828151811061128f5761128f6140e4565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b84866112c4919061417a565b8a85815181106112d6576112d66140e4565b602002602001015160a001518b86815181106112f4576112f46140e4565b602002602001015160c001518d608001518781518110611316576113166140e4565b602002602001015160405161132e9493929190614279565b60405180910390a35b8061134181614142565b915050611153565b5050336000908152600b6020526040902080548492506002906113819084906201000090046bffffffffffffffffffffffff1661417a565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080601260000160108282829054906101000a90046bffffffffffffffffffffffff166113db919061417a565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060008f60016003811061141e5761141e6140e4565b602002013560001c9050600060088264ffffffffff16901c905087610100015163ffffffff168163ffffffff16111561149d57601280547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416021790555b5050505050505050505b5050505050505050565b6114b9612b31565b601f865111156114f5576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360ff16600003611532576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451865114158061155157506115498460036142b6565b60ff16865111155b15611588576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e547001000000000000000000000000000000009091046bffffffffffffffffffffffff169060005b816bffffffffffffffffffffffff1681101561161d5761160a600e82815481106115e1576115e16140e4565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168484612bb2565b508061161581614142565b9150506115b5565b5060008060005b836bffffffffffffffffffffffff1681101561172657600d818154811061164d5761164d6140e4565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff90921694509082908110611688576116886140e4565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591508061171e81614142565b915050611624565b50611733600d6000613a1d565b61173f600e6000613a1d565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c51811015611ac357600c60008e8381518110611784576117846140e4565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff16156117ef576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c60008f8481518110611820576118206140e4565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c90829081106118c8576118c86140e4565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600b83526040908190208151608081018352905460ff80821615801584526101008304909116958301959095526bffffffffffffffffffffffff6201000082048116938301939093526e010000000000000000000000000000900490911660608201529450925061198d576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff87166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009095169490941717919091169290921791909117905580611abb81614142565b915050611765565b50508a51611ad99150600d9060208d0190613a3b565b508851611aed90600e9060208c0190613a3b565b50600087806020019051810190611b0491906143a3565b90506040518061012001604052808a60ff168152602001826000015163ffffffff168152602001826020015163ffffffff168152602001826060015162ffffff168152602001826080015161ffff1681526020016012600001600e9054906101000a900460ff16151581526020016012600001600f9054906101000a900460ff1615158152602001866bffffffffffffffffffffffff168152602001600063ffffffff16815250601260008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160096101000a81548162ffffff021916908362ffffff160217905550608082015181600001600c6101000a81548161ffff021916908361ffff16021790555060a082015181600001600e6101000a81548160ff02191690831515021790555060c082015181600001600f6101000a81548160ff02191690831515021790555060e08201518160000160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061010082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050506040518061018001604052808260a001516bffffffffffffffffffffffff16815260200182610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601360010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001826040015163ffffffff1681526020018260c0015163ffffffff168152602001601360010160149054906101000a900463ffffffff1663ffffffff168152602001601360010160189054906101000a900463ffffffff1663ffffffff1681526020016013600101601c9054906101000a900463ffffffff1663ffffffff1681526020018260e0015163ffffffff16815260200182610100015163ffffffff16815260200182610120015163ffffffff168152602001826101c0015173ffffffffffffffffffffffffffffffffffffffff16815250601360008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555061016082015181600201600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505080610140015160168190555080610160015160178190555060006013600101601c9054906101000a900463ffffffff1690506120c7612dbc565b601480547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff938416021780825560019260189161214291859178010000000000000000000000000000000000000000000000009004166144fd565b92506101000a81548163ffffffff021916908363ffffffff16021790555061218c4630601360010160189054906101000a900463ffffffff1663ffffffff168f8f8f8f8f8f612e71565b60115560005b61219c6009612f1b565b8110156121cc576121b96121b1600983612f25565b600990612f31565b50806121c481614142565b915050612192565b5060005b826101a001515181101561222357612210836101a0015182815181106121f8576121f86140e4565b60200260200101516009612f5390919063ffffffff16565b508061221b81614142565b9150506121d0565b507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581601154601360010160189054906101000a900463ffffffff168f8f8f8f8f8f60405161227a9998979695949392919061456b565b60405180910390a1505050505050505050505050565b612298612b31565b6122a181612f75565b50565b32156122dc576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60125460009081906f01000000000000000000000000000000900460ff1615612333576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f010000000000000000000000000000001790555a9050634585e33b60e01b836040516024016123899190613b48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d169061245c9087908790600401614601565b6020604051808303816000875af115801561247b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249f919061461a565b91505a6124ac90826141e6565b9050601280547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1690559094909350915050565b600087876040516124f292919061463c565b604051908190038120612509918b9060200161464c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b888110156126e057600185878360208110612575576125756140e4565b61258291901a601b6141b2565b8c8c85818110612594576125946140e4565b905060200201358b8b868181106125ad576125ad6140e4565b90506020020135604051600081526020016040526040516125ea949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561260c573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506126ba576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b8401935080806126d890614142565b915050612558565b50827e0101010101010101010101010101010101010101010101010101010101010184161461273b576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b6127826040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b60006127908385018561473d565b60408101515160608201515191925090811415806127b357508082608001515114155b806127c35750808260a001515114155b156127fa576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5090505b92915050565b60008061281688878b6000015161306a565b90506000806128318b8a63ffffffff16858a8a60018b6130ed565b9092509050612840818361417a565b9b9a5050505050505050505050565b60008085600181111561286457612864613b5b565b0361288557612874868585613498565b6128805750600061298e565b6128da565b600185600181111561289957612899613b5b565b036128a857612874868561358b565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128e2612dbc565b836040015163ffffffff161161293257857fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd5636856040516129229190613b48565b60405180910390a250600061298e565b816bffffffffffffffffffffffff168360a001516bffffffffffffffffffffffff16101561298a57857f377c8b0c126ae5248d27aca1c76fac4608aff85673ee3caf09747e1044549e02856040516129229190613b48565b5060015b95945050505050565b60008160018111156129ab576129ab613b5b565b03612a1a576129b8612dbc565b6000838152600460205260409020600101805463ffffffff929092167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790555b5050565b6000612a2b84848461306a565b90508085101561049d5750929392505050565b600080612a59888760a001518860c0015188888860016130ed565b90925090506000612a6a828461417a565b600089815260046020526040902060010180549192508291600c90612aae9084906c0100000000000000000000000090046bffffffffffffffffffffffff1661482a565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a815260046020526040812060010180548594509092612af79185911661417a565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146122dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610522565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015290612dae576000816060015185612c4a919061482a565b90506000612c58858361484f565b90508083604001818151612c6c919061417a565b6bffffffffffffffffffffffff16905250612c87858261487a565b83606001818151612c98919061417a565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b6040015190505b9392505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115612df257612df2613b5b565b03612e6c57606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6791906148ae565b905090565b504390565b6000808a8a8a8a8a8a8a8a8a604051602001612e95999897969594939291906148c7565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b60006127fe825490565b6000612db58383613750565b6000612db58373ffffffffffffffffffffffffffffffffffffffff841661377a565b6000612db58373ffffffffffffffffffffffffffffffffffffffff8416613874565b3373ffffffffffffffffffffffffffffffffffffffff821603612ff4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610522565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000808085600181111561308057613080613b5b565b0361308f5750620138806130ae565b60018560018111156130a3576130a3613b5b565b036128a85750620186a05b6130bf63ffffffff851660146141f9565b6130ca8460016141b2565b6130d99060ff16611d4c6141f9565b6130e3908361419f565b61298e919061419f565b6000806000896080015161ffff168761310691906141f9565b90508380156131145750803a105b1561311c57503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561315257613152613b5b565b036132b15760408051600081526020810190915285156131b057600036604051806080016040528060488152602001614a9f6048913960405160200161319a9392919061495c565b6040516020818303038152906040529050613218565b6015546131cc90640100000000900463ffffffff166004614983565b63ffffffff1667ffffffffffffffff8111156131ea576131ea613de0565b6040519080825280601f01601f191660200182016040528015613214576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e90613268908490600401613b48565b602060405180830381865afa158015613285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a991906148ae565b91505061335d565b60017f000000000000000000000000000000000000000000000000000000000000000060028111156132e5576132e5613b5b565b0361335d57606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a91906148ae565b90505b8461337957808b6080015161ffff1661337691906141f9565b90505b61338761ffff871682614265565b9050600087826133978c8e61419f565b6133a190866141f9565b6133ab919061419f565b6133bd90670de0b6b3a76400006141f9565b6133c79190614265565b905060008c6040015163ffffffff1664e8d4a510006133e691906141f9565b898e6020015163ffffffff16858f886133ff91906141f9565b613409919061419f565b61341790633b9aca006141f9565b61342191906141f9565b61342b9190614265565b613435919061419f565b90506b033b2e3c9fd0803ce800000061344e828461419f565b1115613486576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b600080838060200190518101906134af91906149a6565b90508260c0015163ffffffff16816000015163ffffffff16101561350f57847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516134fd9190613b48565b60405180910390a26000915050612db5565b6020810151158015906135365750602081015181516135339063ffffffff166138c3565b14155b8061354b575043816000015163ffffffff1610155b1561358057847f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301856040516134fd9190613b48565b506001949350505050565b600080828060200190518101906135a291906149fd565b6060810151909150158015906135ce575080606001516135cb826040015163ffffffff166138c3565b14155b806135e3575043816040015163ffffffff1610155b1561362a57837f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301846040516136189190613b48565b60405180910390a260009150506127fe565b805160208083015160405160009361367c938993919201928352602083019190915260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016604082015260440190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600890935291205490915060ff161561370d57847f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8856040516136fa9190613b48565b60405180910390a26000925050506127fe565b600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505092915050565b6000826000018281548110613767576137676140e4565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561386357600061379e6001836141e6565b85549091506000906137b2906001906141e6565b90508181146138175760008660000182815481106137d2576137d26140e4565b90600052602060002001549050808760000184815481106137f5576137f56140e4565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061382857613828614a6f565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506127fe565b60009150506127fe565b5092915050565b60008181526001830160205260408120546138bb575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556127fe565b5060006127fe565b600060017f000000000000000000000000000000000000000000000000000000000000000060028111156138f9576138f9613b5b565b03613a13576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561394c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397091906148ae565b9050808310158061398b575061010061398984836141e6565b115b156139995750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a8290602401602060405180830381865afa1580156139ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db591906148ae565b504090565b919050565b50805460008255906000526020600020908101906122a19190613ac5565b828054828255906000526020600020908101928215613ab5579160200282015b82811115613ab557825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613a5b565b50613ac1929150613ac5565b5090565b5b80821115613ac15760008155600101613ac6565b60005b83811015613af5578181015183820152602001613add565b50506000910152565b60008151808452613b16816020860160208601613ada565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612db56020830184613afe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613b9e57613b9e613b5b565b91905290565b600060208284031215613bb657600080fd5b5035919050565b6020810160028310613b9e57613b9e613b5b565b73ffffffffffffffffffffffffffffffffffffffff811681146122a157600080fd5b60008083601f840112613c0557600080fd5b50813567ffffffffffffffff811115613c1d57600080fd5b602083019150836020828501011115613c3557600080fd5b9250929050565b60008060008060608587031215613c5257600080fd5b8435613c5d81613bd1565b935060208501359250604085013567ffffffffffffffff811115613c8057600080fd5b613c8c87828801613bf3565b95989497509550505050565b600080600060408486031215613cad57600080fd5b83359250602084013567ffffffffffffffff811115613ccb57600080fd5b613cd786828701613bf3565b9497909650939450505050565b60008083601f840112613cf657600080fd5b50813567ffffffffffffffff811115613d0e57600080fd5b6020830191508360208260051b8501011115613c3557600080fd5b60008060008060008060008060e0898b031215613d4557600080fd5b606089018a811115613d5657600080fd5b8998503567ffffffffffffffff80821115613d7057600080fd5b613d7c8c838d01613bf3565b909950975060808b0135915080821115613d9557600080fd5b613da18c838d01613ce4565b909750955060a08b0135915080821115613dba57600080fd5b50613dc78b828c01613ce4565b999c989b50969995989497949560c00135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715613e3357613e33613de0565b60405290565b60405160c0810167ffffffffffffffff81118282101715613e3357613e33613de0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ea357613ea3613de0565b604052919050565b600067ffffffffffffffff821115613ec557613ec5613de0565b5060051b60200190565b600082601f830112613ee057600080fd5b81356020613ef5613ef083613eab565b613e5c565b82815260059290921b84018101918181019086841115613f1457600080fd5b8286015b84811015613f38578035613f2b81613bd1565b8352918301918301613f18565b509695505050505050565b803560ff81168114613a1857600080fd5b600082601f830112613f6557600080fd5b813567ffffffffffffffff811115613f7f57613f7f613de0565b613fb060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e5c565b818152846020838601011115613fc557600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613a1857600080fd5b60008060008060008060c0878903121561401357600080fd5b863567ffffffffffffffff8082111561402b57600080fd5b6140378a838b01613ecf565b9750602089013591508082111561404d57600080fd5b6140598a838b01613ecf565b965061406760408a01613f43565b9550606089013591508082111561407d57600080fd5b6140898a838b01613f54565b945061409760808a01613fe2565b935060a08901359150808211156140ad57600080fd5b506140ba89828a01613f54565b9150509295509295509295565b6000602082840312156140d957600080fd5b8135612db581613bd1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361417357614173614113565b5060010190565b6bffffffffffffffffffffffff81811683821601908082111561386d5761386d614113565b808201808211156127fe576127fe614113565b60ff81811683821601908111156127fe576127fe614113565b61ffff81811683821601908082111561386d5761386d614113565b818103818111156127fe576127fe614113565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561423157614231614113565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261427457614274614236565b500490565b6bffffffffffffffffffffffff851681528360208201528260408201526080606082015260006142ac6080830184613afe565b9695505050505050565b600060ff821660ff84168160ff04811182151516156142d7576142d7614113565b029392505050565b805163ffffffff81168114613a1857600080fd5b805162ffffff81168114613a1857600080fd5b805161ffff81168114613a1857600080fd5b80516bffffffffffffffffffffffff81168114613a1857600080fd5b8051613a1881613bd1565b600082601f83011261435057600080fd5b81516020614360613ef083613eab565b82815260059290921b8401810191818101908684111561437f57600080fd5b8286015b84811015613f3857805161439681613bd1565b8352918301918301614383565b6000602082840312156143b557600080fd5b815167ffffffffffffffff808211156143cd57600080fd5b908301906101e082860312156143e257600080fd5b6143ea613e0f565b6143f3836142df565b8152614401602084016142df565b6020820152614412604084016142df565b6040820152614423606084016142f3565b606082015261443460808401614306565b608082015261444560a08401614318565b60a082015261445660c084016142df565b60c082015261446760e084016142df565b60e082015261010061447a8185016142df565b9082015261012061448c8482016142df565b90820152610140838101519082015261016080840151908201526101806144b4818501614334565b908201526101a083810151838111156144cc57600080fd5b6144d88882870161433f565b8284015250506101c091506144ee828401614334565b91810191909152949350505050565b63ffffffff81811683821601908082111561386d5761386d614113565b600081518084526020808501945080840160005b8381101561456057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161452e565b509495945050505050565b600061012063ffffffff808d1684528b6020850152808b1660408501525080606084015261459b8184018a61451a565b905082810360808401526145af818961451a565b905060ff871660a084015282810360c08401526145cc8187613afe565b905067ffffffffffffffff851660e08401528281036101008401526145f18185613afe565b9c9b505050505050505050505050565b82815260406020820152600061049d6040830184613afe565b60006020828403121561462c57600080fd5b81518015158114612db557600080fd5b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f83011261467357600080fd5b81356020614683613ef083613eab565b82815260059290921b840181019181810190868411156146a257600080fd5b8286015b84811015613f3857803583529183019183016146a6565b600082601f8301126146ce57600080fd5b813560206146de613ef083613eab565b82815260059290921b840181019181810190868411156146fd57600080fd5b8286015b84811015613f3857803567ffffffffffffffff8111156147215760008081fd5b61472f8986838b0101613f54565b845250918301918301614701565b60006020828403121561474f57600080fd5b813567ffffffffffffffff8082111561476757600080fd5b9083019060c0828603121561477b57600080fd5b614783613e39565b82358152602083013560208201526040830135828111156147a357600080fd5b6147af87828601614662565b6040830152506060830135828111156147c757600080fd5b6147d387828601614662565b6060830152506080830135828111156147eb57600080fd5b6147f7878286016146bd565b60808301525060a08301358281111561480f57600080fd5b61481b878286016146bd565b60a08301525095945050505050565b6bffffffffffffffffffffffff82811682821603908082111561386d5761386d614113565b60006bffffffffffffffffffffffff8084168061486e5761486e614236565b92169190910492915050565b60006bffffffffffffffffffffffff808316818516818304811182151516156148a5576148a5614113565b02949350505050565b6000602082840312156148c057600080fd5b5051919050565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b16604085015281606085015261490e8285018b61451a565b91508382036080850152614922828a61451a565b915060ff881660a085015283820360c085015261493f8288613afe565b90861660e085015283810361010085015290506145f18185613afe565b828482376000838201600081528351614979818360208801613ada565b0195945050505050565b600063ffffffff808316818516818304811182151516156148a5576148a5614113565b6000604082840312156149b857600080fd5b6040516040810181811067ffffffffffffffff821117156149db576149db613de0565b6040526149e7836142df565b8152602083015160208201528091505092915050565b600060808284031215614a0f57600080fd5b6040516080810181811067ffffffffffffffff82111715614a3257614a32613de0565b60405282518152614a45602084016142df565b6020820152614a56604084016142df565b6040820152606083015160608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000810000a", } 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 ec9dea3853b..6211f4a22b9 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 3ebee1f5ec17d70c1bf77109bf641b1e2a6cdf99c7149b63c7c05dee26a05721 +keeper_registry_wrapper_2_1: ../../contracts/solc/v0.8.16/KeeperRegistry2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistry2_1.bin e447c18bc78f6bcd61644a9a89063b9589c6e9d8e6e1bc6625587e7d075fa2f1 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 From cef22b27e216ececee9c480a9968761f59f35974 Mon Sep 17 00:00:00 2001 From: FelixFan1992 Date: Wed, 5 Jul 2023 14:01:47 -0400 Subject: [PATCH 4/4] add Log struct --- .../dev/automation/2_1/AutomationUtils2_1.sol | 3 ++ .../automation_utils_2_1.go | 29 +++++++++++++++++-- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol b/contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol index 7951d15c2b3..76ec889244f 100644 --- a/contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol +++ b/contracts/src/v0.8/dev/automation/2_1/AutomationUtils2_1.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.16; import "./KeeperRegistryBase2_1.sol"; +import "./interfaces/ILogAutomation.sol"; /** * @notice this file exposes structs that are otherwise internal to the automation registry @@ -21,4 +22,6 @@ contract AutomationUtils2_1 { function _logTrigger(KeeperRegistryBase2_1.LogTrigger memory) external {} function _conditionalTrigger(KeeperRegistryBase2_1.ConditionalTrigger memory) external {} + + function _log(Log memory) external {} } diff --git a/core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go b/core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go index 95d9950292c..4d43434d06e 100644 --- a/core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go +++ b/core/gethwrappers/generated/automation_utils_2_1/automation_utils_2_1.go @@ -80,9 +80,20 @@ type KeeperRegistryBase21Report struct { PerformDatas [][]byte } +type Log struct { + Index *big.Int + TxIndex *big.Int + TxHash [32]byte + BlockNumber *big.Int + BlockHash [32]byte + Source common.Address + Topics [][32]byte + Data []byte +} + var AutomationUtilsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"blockNum\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.ConditionalTrigger\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_conditionalTrigger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"checkCadance\",\"type\":\"uint32\"}],\"internalType\":\"structKeeperRegistryBase2_1.ConditionalTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_conditionalTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"logIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNum\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.LogTrigger\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_logTrigger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"filterSelector\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"topic0\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic3\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.LogTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_logTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"}],\"internalType\":\"structKeeperRegistryBase2_1.OnchainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_onChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"upkeepIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"gasLimits\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"triggers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"performDatas\",\"type\":\"bytes[]\"}],\"internalType\":\"structKeeperRegistryBase2_1.Report\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_report\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610803806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806332ecf3b51161005057806332ecf3b5146100a65780634b6df294146100b4578063e65d6546146100c257600080fd5b80631c8d82601461007757806321f373d71461008a5780632ff92a8114610098575b600080fd5b6100886100853660046101b4565b50565b005b61008861008536600461024a565b6100886100853660046103b1565b61008861008536600461050b565b610088610085366004610555565b610088610085366004610709565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715610123576101236100d0565b60405290565b60405160c0810167ffffffffffffffff81118282101715610123576101236100d0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610193576101936100d0565b604052919050565b803563ffffffff811681146101af57600080fd5b919050565b6000608082840312156101c657600080fd5b6040516080810181811067ffffffffffffffff821117156101e9576101e96100d0565b604052823581526101fc6020840161019b565b602082015261020d6040840161019b565b6040820152606083013560608201528091505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101af57600080fd5b600060c0828403121561025c57600080fd5b60405160c0810181811067ffffffffffffffff8211171561027f5761027f6100d0565b60405261028b83610226565b8152602083013560ff811681146102a157600080fd5b8060208301525060408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b803562ffffff811681146101af57600080fd5b803561ffff811681146101af57600080fd5b80356bffffffffffffffffffffffff811681146101af57600080fd5b600067ffffffffffffffff821115610335576103356100d0565b5060051b60200190565b600082601f83011261035057600080fd5b813560206103656103608361031b565b61014c565b82815260059290921b8401810191818101908684111561038457600080fd5b8286015b848110156103a65761039981610226565b8352918301918301610388565b509695505050505050565b6000602082840312156103c357600080fd5b813567ffffffffffffffff808211156103db57600080fd5b908301906101e082860312156103f057600080fd5b6103f86100ff565b6104018361019b565b815261040f6020840161019b565b60208201526104206040840161019b565b6040820152610431606084016102da565b6060820152610442608084016102ed565b608082015261045360a084016102ff565b60a082015261046460c0840161019b565b60c082015261047560e0840161019b565b60e082015261010061048881850161019b565b9082015261012061049a84820161019b565b90820152610140838101359082015261016080840135908201526101806104c2818501610226565b908201526101a083810135838111156104da57600080fd5b6104e68882870161033f565b8284015250506101c091506104fc828401610226565b91810191909152949350505050565b60006020828403121561051d57600080fd5b6040516020810181811067ffffffffffffffff82111715610540576105406100d0565b60405261054c8361019b565b81529392505050565b60006040828403121561056757600080fd5b6040516040810181811067ffffffffffffffff8211171561058a5761058a6100d0565b6040526105968361019b565b8152602083013560208201528091505092915050565b600082601f8301126105bd57600080fd5b813560206105cd6103608361031b565b82815260059290921b840181019181810190868411156105ec57600080fd5b8286015b848110156103a657803583529183019183016105f0565b6000601f838184011261061957600080fd5b823560206106296103608361031b565b82815260059290921b8501810191818101908784111561064857600080fd5b8287015b848110156106fd57803567ffffffffffffffff8082111561066d5760008081fd5b818a0191508a603f8301126106825760008081fd5b85820135604082821115610698576106986100d0565b6106c7887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08c8501160161014c565b92508183528c818386010111156106de5760008081fd5b818185018985013750600090820187015284525091830191830161064c565b50979650505050505050565b60006020828403121561071b57600080fd5b813567ffffffffffffffff8082111561073357600080fd5b9083019060c0828603121561074757600080fd5b61074f610129565b823581526020830135602082015260408301358281111561076f57600080fd5b61077b878286016105ac565b60408301525060608301358281111561079357600080fd5b61079f878286016105ac565b6060830152506080830135828111156107b757600080fd5b6107c387828601610607565b60808301525060a0830135828111156107db57600080fd5b6107e787828601610607565b60a0830152509594505050505056fea164736f6c6343000810000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"blockNum\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.ConditionalTrigger\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_conditionalTrigger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"checkCadance\",\"type\":\"uint32\"}],\"internalType\":\"structKeeperRegistryBase2_1.ConditionalTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_conditionalTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"txIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structLog\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_log\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"logIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNum\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.LogTrigger\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_logTrigger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"filterSelector\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"topic0\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic3\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.LogTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_logTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"}],\"internalType\":\"structKeeperRegistryBase2_1.OnchainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_onChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"upkeepIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"gasLimits\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"triggers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"performDatas\",\"type\":\"bytes[]\"}],\"internalType\":\"structKeeperRegistryBase2_1.Report\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_report\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610921806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806332ecf3b51161005b57806332ecf3b5146100b15780634b6df294146100bf578063e65d6546146100cd578063e9720a49146100db57600080fd5b80631c8d82601461008257806321f373d7146100955780632ff92a81146100a3575b600080fd5b6100936100903660046101f1565b50565b005b610093610090366004610287565b6100936100903660046103ee565b610093610090366004610548565b610093610090366004610592565b610093610090366004610752565b61009361009036600461083f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff8111828210171561013c5761013c6100e9565b60405290565b60405160c0810167ffffffffffffffff8111828210171561013c5761013c6100e9565b604051610100810167ffffffffffffffff8111828210171561013c5761013c6100e9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156101d0576101d06100e9565b604052919050565b803563ffffffff811681146101ec57600080fd5b919050565b60006080828403121561020357600080fd5b6040516080810181811067ffffffffffffffff82111715610226576102266100e9565b60405282358152610239602084016101d8565b602082015261024a604084016101d8565b6040820152606083013560608201528091505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101ec57600080fd5b600060c0828403121561029957600080fd5b60405160c0810181811067ffffffffffffffff821117156102bc576102bc6100e9565b6040526102c883610263565b8152602083013560ff811681146102de57600080fd5b8060208301525060408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b803562ffffff811681146101ec57600080fd5b803561ffff811681146101ec57600080fd5b80356bffffffffffffffffffffffff811681146101ec57600080fd5b600067ffffffffffffffff821115610372576103726100e9565b5060051b60200190565b600082601f83011261038d57600080fd5b813560206103a261039d83610358565b610189565b82815260059290921b840181019181810190868411156103c157600080fd5b8286015b848110156103e3576103d681610263565b83529183019183016103c5565b509695505050505050565b60006020828403121561040057600080fd5b813567ffffffffffffffff8082111561041857600080fd5b908301906101e0828603121561042d57600080fd5b610435610118565b61043e836101d8565b815261044c602084016101d8565b602082015261045d604084016101d8565b604082015261046e60608401610317565b606082015261047f6080840161032a565b608082015261049060a0840161033c565b60a08201526104a160c084016101d8565b60c08201526104b260e084016101d8565b60e08201526101006104c58185016101d8565b908201526101206104d78482016101d8565b90820152610140838101359082015261016080840135908201526101806104ff818501610263565b908201526101a0838101358381111561051757600080fd5b6105238882870161037c565b8284015250506101c09150610539828401610263565b91810191909152949350505050565b60006020828403121561055a57600080fd5b6040516020810181811067ffffffffffffffff8211171561057d5761057d6100e9565b604052610589836101d8565b81529392505050565b6000604082840312156105a457600080fd5b6040516040810181811067ffffffffffffffff821117156105c7576105c76100e9565b6040526105d3836101d8565b8152602083013560208201528091505092915050565b600082601f8301126105fa57600080fd5b8135602061060a61039d83610358565b82815260059290921b8401810191818101908684111561062957600080fd5b8286015b848110156103e3578035835291830191830161062d565b600082601f83011261065557600080fd5b813567ffffffffffffffff81111561066f5761066f6100e9565b6106a060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610189565b8181528460208386010111156106b557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126106e357600080fd5b813560206106f361039d83610358565b82815260059290921b8401810191818101908684111561071257600080fd5b8286015b848110156103e357803567ffffffffffffffff8111156107365760008081fd5b6107448986838b0101610644565b845250918301918301610716565b60006020828403121561076457600080fd5b813567ffffffffffffffff8082111561077c57600080fd5b9083019060c0828603121561079057600080fd5b610798610142565b82358152602083013560208201526040830135828111156107b857600080fd5b6107c4878286016105e9565b6040830152506060830135828111156107dc57600080fd5b6107e8878286016105e9565b60608301525060808301358281111561080057600080fd5b61080c878286016106d2565b60808301525060a08301358281111561082457600080fd5b610830878286016106d2565b60a08301525095945050505050565b60006020828403121561085157600080fd5b813567ffffffffffffffff8082111561086957600080fd5b90830190610100828603121561087e57600080fd5b610886610165565b82358152602083013560208201526040830135604082015260608301356060820152608083013560808201526108be60a08401610263565b60a082015260c0830135828111156108d557600080fd5b6108e1878286016105e9565b60c08301525060e0830135828111156108f957600080fd5b61090587828601610644565b60e0830152509594505050505056fea164736f6c6343000810000a", } var AutomationUtilsABI = AutomationUtilsMetaData.ABI @@ -245,6 +256,18 @@ func (_AutomationUtils *AutomationUtilsTransactorSession) ConditionalTriggerConf return _AutomationUtils.Contract.ConditionalTriggerConfig(&_AutomationUtils.TransactOpts, arg0) } +func (_AutomationUtils *AutomationUtilsTransactor) Log(opts *bind.TransactOpts, arg0 Log) (*types.Transaction, error) { + return _AutomationUtils.contract.Transact(opts, "_log", arg0) +} + +func (_AutomationUtils *AutomationUtilsSession) Log(arg0 Log) (*types.Transaction, error) { + return _AutomationUtils.Contract.Log(&_AutomationUtils.TransactOpts, arg0) +} + +func (_AutomationUtils *AutomationUtilsTransactorSession) Log(arg0 Log) (*types.Transaction, error) { + return _AutomationUtils.Contract.Log(&_AutomationUtils.TransactOpts, arg0) +} + func (_AutomationUtils *AutomationUtilsTransactor) LogTrigger(opts *bind.TransactOpts, arg0 KeeperRegistryBase21LogTrigger) (*types.Transaction, error) { return _AutomationUtils.contract.Transact(opts, "_logTrigger", arg0) } @@ -302,6 +325,8 @@ type AutomationUtilsInterface interface { ConditionalTriggerConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21ConditionalTriggerConfig) (*types.Transaction, error) + Log(opts *bind.TransactOpts, arg0 Log) (*types.Transaction, error) + LogTrigger(opts *bind.TransactOpts, arg0 KeeperRegistryBase21LogTrigger) (*types.Transaction, error) LogTriggerConfig(opts *bind.TransactOpts, arg0 KeeperRegistryBase21LogTriggerConfig) (*types.Transaction, error) 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 6211f4a22b9..cb296bee2d8 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 @@ -4,7 +4,7 @@ aggregator_v3_interface: ../../contracts/solc/v0.8.6/AggregatorV3Interface.abi . authorized_forwarder: ../../contracts/solc/v0.7/AuthorizedForwarder.abi ../../contracts/solc/v0.7/AuthorizedForwarder.bin 426d0866a294c77b27a526265f98c688326eb3dec3b7a698180c5f1921ebdf56 authorized_receiver: ../../contracts/solc/v0.7/AuthorizedReceiver.abi ../../contracts/solc/v0.7/AuthorizedReceiver.bin 18e8969ba3234b027e1b16c11a783aca58d0ea5c2361010ec597f134b7bf1c4f automation_consumer_benchmark: ../../contracts/solc/v0.8.16/AutomationConsumerBenchmark.abi ../../contracts/solc/v0.8.16/AutomationConsumerBenchmark.bin f52c76f1aaed4be541d82d97189d70f5aa027fc9838037dd7a7d21910c8c488e -automation_utils_2_1: ../../contracts/solc/v0.8.16/AutomationUtils2_1.abi ../../contracts/solc/v0.8.16/AutomationUtils2_1.bin 5388642ae1f73e718eee2b23f725495f1f2dffbc37f0b61c0befd2aa6d14bfc7 +automation_utils_2_1: ../../contracts/solc/v0.8.16/AutomationUtils2_1.abi ../../contracts/solc/v0.8.16/AutomationUtils2_1.bin 72d51da6bd12303508f1e256c643cd71942f93200bfeae1424e165534d2019b9 batch_blockhash_store: ../../contracts/solc/v0.8.6/BatchBlockhashStore.abi ../../contracts/solc/v0.8.6/BatchBlockhashStore.bin c5ab26709a01050402615659403f32d5cd1b85f3ad6bb6bfe021692f4233cf19 batch_vrf_coordinator_v2: ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2.abi ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2.bin d0a54963260d8c1f1bbd984b758285e6027cfb5a7e42701bcb562ab123219332 blockhash_store: ../../contracts/solc/v0.6/BlockhashStore.abi ../../contracts/solc/v0.6/BlockhashStore.bin a0dc60bcc4bf071033d23fddf7ae936c6a4d1dd81488434b7e24b7aa1fabc37c