diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index 45e1b9fecd..1c4d20a76f 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -1,9 +1,22 @@ +AdvancedPoolHooksExtractor_extract:testFuzz_extract_PostflightCheck(address,address,address,address,uint256,uint256,uint64,bytes4) (runs: 256, μ: 42064, ~: 42064) +AdvancedPoolHooksExtractor_extract:testFuzz_extract_PreflightCheck(address,address,address,uint256,uint256,uint64,bytes4) (runs: 256, μ: 32972, ~: 32972) AdvancedPoolHooksExtractor_extract:test_extract_PostflightCheck() (gas: 63592) AdvancedPoolHooksExtractor_extract:test_extract_PreflightCheck() (gas: 51907) +AdvancedPoolHooksExtractor_extract:test_extract_RevertWhen_UnsupportedSelector() (gas: 14578) AdvancedPoolHooks_applyAllowListUpdates:test_applyAllowListUpdates() (gas: 184185) +AdvancedPoolHooks_applyAllowListUpdates:test_applyAllowListUpdates_RevertWhen_AllowListNotEnabled() (gas: 2087921) +AdvancedPoolHooks_applyAllowListUpdates:test_applyAllowListUpdates_RevertWhen_OnlyCallableByOwner() (gas: 12123) AdvancedPoolHooks_applyAllowListUpdates:test_applyAllowListUpdates_SkipsZero() (gas: 23999) AdvancedPoolHooks_applyAuthorizedCallerUpdates:test_applyAuthorizedCallerUpdates_AddAndRemove() (gas: 65274) +AdvancedPoolHooks_applyAuthorizedCallerUpdates:test_applyAuthorizedCallerUpdates_RevertWhen_OnlyCallableByOwner() (gas: 13044) AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates() (gas: 252722) +AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_DuplicateCCVBetweenInboundCCVsAndThresholdInboundCCVs() (gas: 19664) +AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_DuplicateCCVBetweenOutboundCCVsAndThresholdOutboundCCVs() (gas: 19603) +AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_DuplicateCCV_Inbound() (gas: 21976) +AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_DuplicateCCV_Outbound() (gas: 21819) +AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_OnlyCallableByOwner() (gas: 12436) +AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_ThresholdInboundCCVsSpecifiedButNoInboundBaseCCVs() (gas: 17865) +AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_ThresholdOutboundCCVsSpecifiedButNoOutboundBaseCCVs() (gas: 17819) AdvancedPoolHooks_applyCCVConfigUpdates:test_applyCCVConfigUpdates_getAllCCVConfigs_multipleChains() (gas: 224269) AdvancedPoolHooks_getRequiredCCVsOutbound:test_getRequiredCCVs_Inbound_BaseCCVs() (gas: 159023) AdvancedPoolHooks_getRequiredCCVsOutbound:test_getRequiredCCVs_Inbound_NoAdditionalCCVs() (gas: 159381) @@ -12,38 +25,67 @@ AdvancedPoolHooks_getRequiredCCVsOutbound:test_getRequiredCCVs_Outbound_BaseCCVs AdvancedPoolHooks_getRequiredCCVsOutbound:test_getRequiredCCVs_Outbound_NoAdditionalCCVs() (gas: 161303) AdvancedPoolHooks_getRequiredCCVsOutbound:test_getRequiredCCVs_Outbound_WithThresholdOutboundCCVs() (gas: 217082) AdvancedPoolHooks_postflightCheck:test_postflightCheck_OnlyAuthorizedCallersCanInvoke() (gas: 18745) +AdvancedPoolHooks_postflightCheck:test_postflightCheck_RevertWhen_PolicyEngineRejects() (gas: 578779) +AdvancedPoolHooks_postflightCheck:test_postflightCheck_RevertWhen_UnauthorizedCaller() (gas: 23591) AdvancedPoolHooks_postflightCheck:test_postflightCheck_WithPolicyEngine() (gas: 814931) AdvancedPoolHooks_postflightCheck:test_postflightCheck_WithoutPolicyEngine() (gas: 22874) AdvancedPoolHooks_preflightCheck:test_preflightCheck_AllowListAndPolicyEngine() (gas: 2662335) AdvancedPoolHooks_preflightCheck:test_preflightCheck_OnlyAuthorizedCallersCanInvoke() (gas: 18752) +AdvancedPoolHooks_preflightCheck:test_preflightCheck_RevertWhen_PolicyEngineRejects() (gas: 487493) +AdvancedPoolHooks_preflightCheck:test_preflightCheck_RevertWhen_SenderNotAllowed() (gas: 2235777) +AdvancedPoolHooks_preflightCheck:test_preflightCheck_RevertWhen_UnauthorizedCaller() (gas: 23188) AdvancedPoolHooks_preflightCheck:test_preflightCheck_WithPolicyEngine() (gas: 632059) AdvancedPoolHooks_preflightCheck:test_preflightCheck_WithoutPolicyEngine() (gas: 23078) AdvancedPoolHooks_setPolicyEngine:test_getPolicyEngine() (gas: 110707) AdvancedPoolHooks_setPolicyEngine:test_setPolicyEngine_FromZeroAddress() (gas: 114034) +AdvancedPoolHooks_setPolicyEngine:test_setPolicyEngine_RevertWhen_OldEngineDetachReverts() (gas: 115175) +AdvancedPoolHooks_setPolicyEngine:test_setPolicyEngine_RevertWhen_OldEngineDoesNotImplementDetach() (gas: 106505) +AdvancedPoolHooks_setPolicyEngine:test_setPolicyEngine_RevertWhen_OnlyCallableByOwner() (gas: 13964) AdvancedPoolHooks_setPolicyEngine:test_setPolicyEngine_SameValue() (gas: 115852) AdvancedPoolHooks_setPolicyEngine:test_setPolicyEngine_Swap() (gas: 154252) AdvancedPoolHooks_setPolicyEngine:test_setPolicyEngine_ToZeroAddress() (gas: 93380) AdvancedPoolHooks_setPolicyEngineAllowFailedDetach:test_setPolicyEngineAllowFailedDetach_OldEngineDetachReverts() (gas: 194383) AdvancedPoolHooks_setPolicyEngineAllowFailedDetach:test_setPolicyEngineAllowFailedDetach_OldEngineDoesNotImplementDetach() (gas: 185385) +AdvancedPoolHooks_setPolicyEngineAllowFailedDetach:test_setPolicyEngineAllowFailedDetach_RevertWhen_OnlyCallableByOwner() (gas: 13221) AdvancedPoolHooks_setPolicyEngineAllowFailedDetach:test_setPolicyEngineAllowFailedDetach_Swap() (gas: 154080) AdvancedPoolHooks_setThresholdAmount:test_setThresholdAmount() (gas: 19636) +AdvancedPoolHooks_setThresholdAmount:test_setThresholdAmount_RevertWhen_OnlyCallableByOwner() (gas: 11781) AdvancedPoolHooks_setThresholdAmount:test_setThresholdAmount_ToZero() (gas: 14586) BaseERC20_constructor:test_constructor() (gas: 31080) BaseERC20_constructor:test_constructor_CcipAdminDefaultsToMsgSender() (gas: 680839) BaseERC20_constructor:test_constructor_NoPreMint() (gas: 636578) BaseERC20_constructor:test_constructor_PreMintRecipient() (gas: 685603) +BaseERC20_constructor:test_constructor_RevertWhen_MaxSupplyExceeded() (gas: 131886) +BaseERC20_constructor:test_constructor_RevertWhen_PreMintAddressNotSet() (gas: 84534) +BaseERC20_constructor:test_constructor_RevertWhen_PreMintRecipientSetWithZeroPreMint() (gas: 86904) BaseERC20_constructor:test_constructor_SupportsInterface() (gas: 10353) BaseERC20_constructor:test_typeAndVersion() (gas: 10016) BaseERC20_setCCIPAdmin:test_setCCIPAdmin() (gas: 20155) +BaseERC20_setCCIPAdmin:test_setCCIPAdmin_RevertWhen_CannotRenounceCCIPAdmin() (gas: 10817) +BaseERC20_setCCIPAdmin:test_setCCIPAdmin_RevertWhen_OnlyCCIPAdmin() (gas: 11459) BaseERC20_setCCIPAdmin:test_setCCIPAdmin_TransferChain() (gas: 24950) +BaseERC20_transfer:test_approve_RevertWhen_InvalidRecipient_ApproveToSelf() (gas: 9518) BaseERC20_transfer:test_transfer() (gas: 43163) +BaseERC20_transfer:test_transfer_RevertWhen_InvalidRecipient_TransferToSelf() (gas: 9651) BaseVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates() (gas: 91604) BaseVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_DisableAllowlist() (gas: 105260) BaseVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RemoveSenders() (gas: 129644) +BaseVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RevertWhen_InvalidAllowListRequest_AddingToDisabledAllowlist() (gas: 28066) +BaseVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RevertWhen_InvalidAllowListRequest_ZeroAddressSender() (gas: 15354) +BaseVerifier_applyRemoteChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_DestGasCannotBeZero() (gas: 35910) BaseVerifier_applyRemoteChainConfigUpdates:test_applyRemoteChainConfigUpdates() (gas: 46527) +BaseVerifier_applyRemoteChainConfigUpdates:test_applyRemoteChainConfigUpdates_RevertWhen_InvalidRemoteChainConfig_ZeroRemoteChainSelector() (gas: 13582) BaseVerifier_assertSenderIsAllowed:test_assertSenderIsAllowed() (gas: 18209) BaseVerifier_assertSenderIsAllowed:test_assertSenderIsAllowed_AllowlistEnabledWithAllowedSender() (gas: 103983) +BaseVerifier_assertSenderIsAllowed:test_assertSenderIsAllowed_RevertWhen_CallerIsNotARampOnRouter() (gas: 17059) +BaseVerifier_assertSenderIsAllowed:test_assertSenderIsAllowed_RevertWhen_SenderNotAllowed() (gas: 108514) +BaseVerifier_constructor:test_constructor_RevertWhen_VersionTagCannotBeZero() (gas: 94815) +BaseVerifier_constructor:test_constructor_RevertWhen_ZeroAddressNotAllowed_RMNIsZero() (gas: 92584) BaseVerifier_getFee:test_getFee() (gas: 18798) +BaseVerifier_getFee:test_getFee_RevertWhen_BlockDepthBelowMinimum() (gas: 41152) +BaseVerifier_getFee:test_getFee_RevertWhen_BlockDepthRequestedButOnlyFinalityAllowed() (gas: 18883) +BaseVerifier_getFee:test_getFee_RevertWhen_DestinationNotSupported() (gas: 16016) +BaseVerifier_getFee:test_getFee_RevertWhen_SafeFlagNotAllowed() (gas: 20188) BaseVerifier_getFee:test_getFee_WithAllowedBlockDepth() (gas: 40431) BaseVerifier_getFee:test_getFee_WithWaitForSafeFlag() (gas: 41824) BaseVerifier_getRemoteChainConfig:test_getRemoteChainConfig() (gas: 18477) @@ -62,10 +104,16 @@ BaseVerifier_setStorageLocations:test_setStorageLocation_SomeToSome() (gas: 3709 BaseVerifier_supportsInterface:test_supportsInterface() (gas: 10038) BurnFromMintTokenPool_lockOrBurn:test_constructor() (gas: 21982) BurnFromMintTokenPool_lockOrBurn:test_lockOrBurn() (gas: 248551) +BurnFromMintTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_ChainNotAllowed() (gas: 21743) +BurnFromMintTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_PoolBurnRevertNotHealthy() (gas: 29504) BurnMintTokenPool_lockOrBurn:test_constructor() (gas: 14888) BurnMintTokenPool_lockOrBurn:test_lockOrBurn_() (gas: 246620) BurnMintTokenPool_lockOrBurn:test_lockOrBurn_FeeNotApplied_LegacyLockOrBurn() (gas: 266285) +BurnMintTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_ChainNotAllowed() (gas: 21464) +BurnMintTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_CursedByRMN() (gas: 29470) BurnMintTokenPool_lockOrBurn:test_lockOrBurn_WithFinalityParam() (gas: 249547) +BurnMintTokenPool_releaseOrMint:test_RevertWhen_ChainNotAllowed() (gas: 21721) +BurnMintTokenPool_releaseOrMint:test_RevertWhen_PoolMintNotHealthy() (gas: 29821) BurnMintTokenPool_releaseOrMint:test_releaseOrMint() (gas: 108444) BurnMintTokenPool_releaseOrMint:test_releaseOrMint_WithFinalityParam() (gas: 108491) BurnMintTokenPool_typeAndVersion:test_typeAndVersion() (gas: 4043014) @@ -78,7 +126,13 @@ BurnMintWithLockReleaseFlagTokenPool_typeAndVersion:test_typeAndVersion() (gas: BurnToAddressMintTokenPool_lockOrBurn:test_LockOrBurn() (gas: 243425) BurnWithFromMintTokenPool_lockOrBurn:test_constructor() (gas: 21982) BurnWithFromMintTokenPool_lockOrBurn:test_lockOrBurn() (gas: 248684) +BurnWithFromMintTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_ChainNotAllowed() (gas: 21743) +BurnWithFromMintTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_PoolBurnRevertNotHealthy() (gas: 29504) CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_applyCCVConfigUpdates() (gas: 172065) +CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_DuplicateCCV() (gas: 16854) +CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_InvalidOptionalThreshold() (gas: 22831) +CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_OptionalThresholdWithNoOptionalCCVs() (gas: 14807) +CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_applyCCVConfigUpdates_RevertWhen_ZeroAddressNotAllowedAsOptional() (gas: 17444) CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_disableChain_RemovesFromRemoteChainSelectors() (gas: 138922) CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_enableChain_AddsToRemoteChainSelectors() (gas: 175538) CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_enableChain_SetsAllowedFinalityConfig() (gas: 194349) @@ -86,47 +140,120 @@ CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_getCCVsAndFinalityConfig_Ft CCIPClientExampleWithCCVs_applyCCVConfigUpdates:test_getCCVsAndFinalityConfig_RequireFinality_ReturnsZeroAllowedFinalityConfig() (gas: 77142) CCIPClientExample_sanity:test_ImmutableExamples() (gas: 2787164) CCTPMessageTransmitterProxy_constructor:test_constructor() (gas: 631640) +CCTPMessageTransmitterProxy_constructor:test_constructor_RevertWhen_TransmitterIsZero() (gas: 62796) CCTPMessageTransmitterProxy_getCCTPTransmitter:test_getCCTPTransmitter() (gas: 10877) CCTPMessageTransmitterProxy_receiveMessage:test_receiveMessage() (gas: 32096) +CCTPMessageTransmitterProxy_receiveMessage:test_receiveMessage_RevertWhen_UnauthorizedCaller() (gas: 18831) +CCTPThroughCCVTokenPool_constructor:test_constructor_RevertWhen_ZeroAddressCCTPVerifier() (gas: 169160) CCTPThroughCCVTokenPool_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig() (gas: 64329) +CCTPThroughCCVTokenPool_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_RevertWhen_CCVNotSetOnResolver() (gas: 20921) CCTPThroughCCVTokenPool_lockOrBurn:test_lockOrBurn() (gas: 51705) +CCTPThroughCCVTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_ChainNotAllowed() (gas: 28593) +CCTPThroughCCVTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_IPoolV1NotSupported() (gas: 21246) +CCTPThroughCCVTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_InvalidCaller() (gas: 30279) CCTPThroughCCVTokenPool_releaseOrMint:test_releaseOrMint() (gas: 46174) +CCTPThroughCCVTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_ChainNotAllowed() (gas: 26726) +CCTPThroughCCVTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_IPoolV1NotSupported() (gas: 20366) +CCTPThroughCCVTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_InvalidCaller() (gas: 28392) CCTPVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_AsAllowlistAdmin() (gas: 91594) CCTPVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_AsOwner() (gas: 94308) +CCTPVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RevertWhen_OnlyCallableByOwnerOrAllowlistAdmin() (gas: 14709) CCTPVerifier_applyRemoteChainConfigUpdates:test_applyRemoteChainConfigUpdates() (gas: 48202) +CCTPVerifier_applyRemoteChainConfigUpdates:test_applyRemoteChainConfigUpdates_RevertWhen_OnlyCallableByOwner() (gas: 11849) CCTPVerifier_constructor:test_constructor() (gas: 3005382) +CCTPVerifier_constructor:test_constructor_RevertWhen_InvalidMessageTransmitterOnProxy() (gas: 139205) +CCTPVerifier_constructor:test_constructor_RevertWhen_InvalidMessageTransmitterVersion() (gas: 135976) +CCTPVerifier_constructor:test_constructor_RevertWhen_InvalidTokenMessengerVersion() (gas: 130157) +CCTPVerifier_constructor:test_constructor_RevertWhen_VersionTagCannotBeZero() (gas: 127684) +CCTPVerifier_constructor:test_constructor_RevertWhen_ZeroAddressNotAllowed_MessageTransmitterProxyIsZero() (gas: 125893) +CCTPVerifier_constructor:test_constructor_RevertWhen_ZeroAddressNotAllowed_TokenMessengerIsZero() (gas: 125471) +CCTPVerifier_constructor:test_constructor_RevertWhen_ZeroAddressNotAllowed_USDCTokenIsZero() (gas: 125633) CCTPVerifier_forwardToVerifier:test_forwardToVerifier_CustomFinality() (gas: 119250) CCTPVerifier_forwardToVerifier:test_forwardToVerifier_CustomMaxFee() (gas: 117206) CCTPVerifier_forwardToVerifier:test_forwardToVerifier_MintRecipientFromDomain() (gas: 149467) CCTPVerifier_forwardToVerifier:test_forwardToVerifier_MintRecipientFromMessage() (gas: 117075) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_CallerIsNotARampOnRouter() (gas: 46971) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_CursedByRMN() (gas: 41507) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_DestinationNotSupported() (gas: 46119) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_InvalidReceiver() (gas: 51852) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_InvalidToken() (gas: 55518) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_InvalidTokenTransferLength() (gas: 64137) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_InvalidVerifierArgsLength() (gas: 58254) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_SenderIsNotAllowed() (gas: 131836) +CCTPVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_UnknownDomain() (gas: 70640) CCTPVerifier_setAllowedFinalityConfig:test_setAllowedFinalityConfig() (gas: 37122) +CCTPVerifier_setAllowedFinalityConfig:test_setAllowedFinalityConfig_RevertWhen_OnlyCallableByOwner() (gas: 11613) CCTPVerifier_setDomains:test_setDomains() (gas: 50284) +CCTPVerifier_setDomains:test_setDomains_RevertWhen_InvalidDomain_AllowedCallerOnDestIsZero() (gas: 14120) +CCTPVerifier_setDomains:test_setDomains_RevertWhen_InvalidDomain_AllowedCallerOnSourceIsZero() (gas: 14250) +CCTPVerifier_setDomains:test_setDomains_RevertWhen_InvalidDomain_DestChainSelectorIsZero() (gas: 14076) +CCTPVerifier_setDomains:test_setDomains_RevertWhen_OnlyCallableByOwner() (gas: 11779) CCTPVerifier_setDynamicConfig:test_setDynamicConfig() (gas: 31939) +CCTPVerifier_setDynamicConfig:test_setDynamicConfig_RevertWhen_InvalidFastFinalityBps_ExceedsMax() (gas: 15897) +CCTPVerifier_setDynamicConfig:test_setDynamicConfig_RevertWhen_InvalidFastFinalityBps_Zero() (gas: 15667) +CCTPVerifier_setDynamicConfig:test_setDynamicConfig_RevertWhen_OnlyCallableByOwner() (gas: 11915) +CCTPVerifier_updateStorageLocations:test_updateStorageLocation_RevertWhen_OnlyCallableByOwner() (gas: 11729) CCTPVerifier_updateStorageLocations:test_updateStorageLocations() (gas: 35326) CCTPVerifier_verifyMessage:test_verifyMessage() (gas: 204852) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_CallerIsNotOffRamp() (gas: 49666) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_CursedByRMN() (gas: 41931) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidCCVVersion_AttestedVersion() (gas: 92942) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidCCVVersion_VersionPrefix() (gas: 90916) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidMessageId() (gas: 89205) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidMessageSender() (gas: 117830) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidSourceDomain() (gas: 115043) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidVerifierResults() (gas: 45733) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_ReceiveMessageCallFailed() (gas: 125488) +CCTPVerifier_verifyMessage:test_verifyMessage_RevertWhen_UnknownDomain() (gas: 130970) CCTPVerifier_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 216524) CCTPVerifier_withdrawFeeTokens:test_withdrawFeeTokens_MultipleTokens() (gas: 1773412) CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_OnlyDefaultProvided() (gas: 7802) CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_OnlyMandatedProvided() (gas: 7620) +CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_RevertWhen_BothEmpty() (gas: 9744) +CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_RevertWhen_DuplicateAcrossDefaultAndMandated() (gas: 11702) +CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_RevertWhen_DuplicateWithinDefault() (gas: 11306) +CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_RevertWhen_DuplicateWithinMandated() (gas: 13067) +CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_RevertWhen_ZeroInDefault() (gas: 10373) +CCVConfigValidation_validateDefaultAndMandatedCCVs:test_validateDefaultAndMandatedCCVs_RevertWhen_ZeroInMandated() (gas: 12832) CREATE2Factory_applyAllowListUpdates:test_applyAllowListUpdates() (gas: 56082) +CREATE2Factory_applyAllowListUpdates:test_applyAllowListUpdates_RevertWhen_OnlyCallableByOwner() (gas: 12073) CREATE2Factory_applyAllowListUpdates:test_applyAllowListUpdates_SkipEmitWhen_NoOp() (gas: 29778) CREATE2Factory_createAndCall:test_createAndCall_MultipleCalls() (gas: 253018) CREATE2Factory_createAndCall:test_createAndCall_NoCalls() (gas: 237104) +CREATE2Factory_createAndCall:test_createAndCall_RevertWhen_CallFailed() (gas: 231867) +CREATE2Factory_createAndCall:test_createAndCall_RevertWhen_CallerNotAllowed() (gas: 20621) +CREATE2Factory_createAndCall:test_createAndCall_RevertWhen_Create2FailedDeployment_Storage_InvalidValue() (gas: 75288) CREATE2Factory_createAndCall:test_createAndCall_SingleCall() (gas: 248884) CREATE2Factory_createAndTransferOwnership:test_createAndTransferOwnership() (gas: 247322) +CREATE2Factory_createAndTransferOwnership:test_createAndTransferOwnership_RevertWhen_CallerNotAllowed() (gas: 20373) +CREATE2Factory_createAndTransferOwnership:test_createAndTransferOwnership_RevertWhen_Create2FailedDeployment_Storage_InvalidValue() (gas: 75286) CommitteeVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_AsAllowlistAdmin() (gas: 91726) CommitteeVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_AsOwner() (gas: 94528) +CommitteeVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RevertWhen_OnlyCallableByOwnerOrAllowlistAdmin() (gas: 14841) CommitteeVerifier_applyRemoteChainConfigUpdates:test_applyRemoteChainConfigUpdates() (gas: 48203) +CommitteeVerifier_applyRemoteChainConfigUpdates:test_applyRemoteChainConfigUpdates_RevertWhen_OnlyOwner() (gas: 11926) CommitteeVerifier_constructor:test_constructor() (gas: 2707274) CommitteeVerifier_forwardToVerifier:test_forwardToVerifier() (gas: 35754) +CommitteeVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_CallerIsNotARampOnRouter() (gas: 33120) +CommitteeVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_CursedByRMN() (gas: 27644) CommitteeVerifier_setAllowedFinalityConfig:test_setAllowedFinalityConfig() (gas: 37320) +CommitteeVerifier_setAllowedFinalityConfig:test_setAllowedFinalityConfig_RevertWhen_OnlyCallableByOwner() (gas: 11745) CommitteeVerifier_setDynamicConfig:test_setDynamicConfig() (gas: 30263) +CommitteeVerifier_setDynamicConfig:test_setDynamicConfig_RevertWhen_OnlyCallableByOwner() (gas: 11710) +CommitteeVerifier_storageLocationsAdmin:test_acceptStorageLocationsAdmin_RevertWhen_NotPendingAdmin() (gas: 11145) CommitteeVerifier_storageLocationsAdmin:test_acceptStorageLocationsAdmin_SetsNewAdminAndEmits() (gas: 34101) +CommitteeVerifier_storageLocationsAdmin:test_transferStorageLocationsAdmin_RevertWhen_NotStorageLocationsAdmin() (gas: 13485) +CommitteeVerifier_storageLocationsAdmin:test_transferStorageLocationsAdmin_RevertWhen_TransferToSelf() (gas: 10962) CommitteeVerifier_storageLocationsAdmin:test_transferStorageLocationsAdmin_SetsPendingAndEmits() (gas: 41146) CommitteeVerifier_storageLocationsAdmin:test_updateStorageLocation_AfterAdminTransfer() (gas: 52997) +CommitteeVerifier_updateStorageLocations:test_updateStorageLocation_RevertWhen_NotStorageLocationsAdmin() (gas: 13134) CommitteeVerifier_updateStorageLocations:test_updateStorageLocations() (gas: 35346) CommitteeVerifier_verifyMessage:test_verifyMessage_ExtractsSignatureLengthCorrectly() (gas: 35450) CommitteeVerifier_verifyMessage:test_verifyMessage_ForwardCompatibilityWithExtraData() (gas: 35874) +CommitteeVerifier_verifyMessage:test_verifyMessage_RevertWhen_CursedByRMN() (gas: 25101) +CommitteeVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidVerifierResults_InvalidPrefix() (gas: 24130) +CommitteeVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidVerifierResults_SignatureLengthExceedsVerifierResults() (gas: 25208) +CommitteeVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidVersion() (gas: 24484) CommitteeVerifier_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 216560) CommitteeVerifier_withdrawFeeTokens:test_withdrawFeeTokens_MultipleTokens() (gas: 1773456) CrossChainPoolToken_constructor:test_constructor() (gas: 32823) @@ -134,15 +261,24 @@ CrossChainPoolToken_constructor:test_constructor_PoolTokenIsSelf() (gas: 8773) CrossChainPoolToken_constructor:test_constructor_SupportsInterface() (gas: 13950) CrossChainPoolToken_constructor:test_typeAndVersion() (gas: 10027) CrossChainPoolToken_lockOrBurn:test_lockOrBurn() (gas: 225549) +CrossChainPoolToken_lockOrBurn:test_lockOrBurn_RevertWhen_ChainNotAllowed() (gas: 19348) +CrossChainPoolToken_lockOrBurn:test_lockOrBurn_RevertWhen_CursedByRMN() (gas: 19434) CrossChainPoolToken_releaseOrMint:test_releaseOrMint() (gas: 83497) +CrossChainPoolToken_releaseOrMint:test_releaseOrMint_RevertWhen_ChainNotAllowed() (gas: 19637) +CrossChainPoolToken_releaseOrMint:test_releaseOrMint_RevertWhen_CursedByRMN() (gas: 21128) +CrossChainPoolToken_releaseOrMint:test_releaseOrMint_RevertWhen_MaxSupplyExceeded() (gas: 61433) CrossChainPoolToken_sendReceive:test_sendReceive_FullLifecycle() (gas: 176593) CrossChainPoolToken_sendReceive:test_sendReceive_MintToPoolAllowed() (gas: 97602) CrossChainPoolToken_sendReceive:test_sendReceive_TransferToPoolAllowed() (gas: 40162) CrossChainPoolToken_setCCIPAdmin:test_setCCIPAdmin() (gas: 22865) +CrossChainPoolToken_setCCIPAdmin:test_setCCIPAdmin_RevertWhen_CalledByCCIPAdmin() (gas: 23311) +CrossChainPoolToken_setCCIPAdmin:test_setCCIPAdmin_RevertWhen_CalledByStranger() (gas: 11688) CrossChainPoolToken_setCCIPAdmin:test_setCCIPAdmin_ToZeroAddress() (gas: 16618) CrossChainToken_burn:test_burn() (gas: 33114) CrossChainToken_burn:test_burnFrom() (gas: 64155) +CrossChainToken_burn:test_burnFrom_RevertWhen_MissingRole() (gas: 13360) CrossChainToken_burn:test_burn_AddressOverload() (gas: 62476) +CrossChainToken_burn:test_burn_RevertWhen_MissingRole() (gas: 13049) CrossChainToken_constructor:test_constructor() (gas: 32522) CrossChainToken_constructor:test_constructor_OwnerDefaultsToMsgSender() (gas: 1435921) CrossChainToken_constructor:test_constructor_Roles() (gas: 17985) @@ -150,30 +286,54 @@ CrossChainToken_constructor:test_constructor_SupportsInterface() (gas: 14227) CrossChainToken_constructor:test_typeAndVersion() (gas: 9994) CrossChainToken_grantMintAndBurnRoles:test_grantMintAndBurnRoles() (gas: 73318) CrossChainToken_mint:test_mint() (gas: 50010) +CrossChainToken_mint:test_mint_RevertWhen_InvalidRecipient() (gas: 14847) +CrossChainToken_mint:test_mint_RevertWhen_MaxSupplyExceeded() (gas: 47934) +CrossChainToken_mint:test_mint_RevertWhen_MissingRole() (gas: 13910) CrossChainToken_setCCIPAdmin:test_setCCIPAdmin() (gas: 23015) +CrossChainToken_setCCIPAdmin:test_setCCIPAdmin_RevertWhen_MissingRole() (gas: 13937) DefensiveExampleTest:test_HappyPath() (gas: 203935) DefensiveExampleTest:test_Recovery() (gas: 429651) ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10673) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting_RevertWhen_NotEnoughGasForSupportsInterface() (gas: 6493) ERC20LockBox_constructor:test_constructor() (gas: 744423) +ERC20LockBox_constructor:test_constructor_RevertWhen_TokenIsZeroAddress() (gas: 58855) +ERC20LockBox_deposit:testFuzz_deposit_Success(uint256) (runs: 256, μ: 70891, ~: 70852) ERC20LockBox_deposit:test_deposit_FromDifferentCallers() (gas: 509881) ERC20LockBox_deposit:test_deposit_MultipleDeposits() (gas: 73442) +ERC20LockBox_deposit:test_deposit_RevertWhen_TokenAmountCannotBeZero() (gas: 41459) +ERC20LockBox_deposit:test_deposit_RevertWhen_Unauthorized() (gas: 42516) +ERC20LockBox_deposit:test_deposit_RevertWhen_UnsupportedToken() (gas: 1634151) +ERC20LockBox_withdraw:testFuzz_withdraw(uint256) (runs: 256, μ: 95870, ~: 95864) ERC20LockBox_withdraw:test_withdraw_EventEmission() (gas: 86940) ERC20LockBox_withdraw:test_withdraw_MultipleWithdrawals() (gas: 127317) ERC20LockBox_withdraw:test_withdraw_PartialAmount() (gas: 99939) +ERC20LockBox_withdraw:test_withdraw_RevertWhen_InsufficientBalance() (gas: 64538) +ERC20LockBox_withdraw:test_withdraw_RevertWhen_RecipientCannotBeZeroAddress() (gas: 60596) +ERC20LockBox_withdraw:test_withdraw_RevertWhen_TokenAmountCannotBeZero() (gas: 62315) +ERC20LockBox_withdraw:test_withdraw_RevertWhen_Unauthorized() (gas: 65210) ERC20LockBox_withdraw:test_withdraw_ToDifferentRecipients() (gas: 117718) ERC20LockBox_withdraw:test_withdraw_uint256_max() (gas: 91349) +EtherSenderReceiverTest_ccipReceive:testFuzz_ccipReceive(uint256) (runs: 256, μ: 27308, ~: 48562) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 98080) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 48430) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 18138) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 16363) +EtherSenderReceiverTest_ccipSend:testFuzz_ccipSend(uint256,uint256) (runs: 256, μ: 79450, ~: 78246) +EtherSenderReceiverTest_ccipSend:testFuzz_ccipSend_feeToken(uint256,uint256) (runs: 256, μ: 121081, ~: 101599) +EtherSenderReceiverTest_ccipSend:test_RevertWhen_ccipSends_insufficientFee_feeToken() (gas: 100699) +EtherSenderReceiverTest_ccipSend:test_RevertWhen_ccipSends_insufficientFee_native() (gas: 77443) +EtherSenderReceiverTest_ccipSend:test_RevertWhen_ccipSends_insufficientFee_weth() (gas: 100066) EtherSenderReceiverTest_ccipSend:test_ccipSend_feeToken() (gas: 145769) EtherSenderReceiverTest_ccipSend:test_ccipSend_native() (gas: 81659) EtherSenderReceiverTest_ccipSend:test_ccipSend_nativeExcess() (gas: 81976) EtherSenderReceiverTest_ccipSend:test_ccipSend_weth() (gas: 96897) EtherSenderReceiverTest_constructor:test_constructor() (gas: 18108) EtherSenderReceiverTest_getFee:test_getFee() (gas: 28407) +EtherSenderReceiverTest_validateFeeToken:test_RevertWhen_validateFeeTokens_feeToken_tokenAmountNotEqualToMsgValue() (gas: 20714) EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 17073) EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 16896) +EtherSenderReceiverTest_validatedMessage:testFuzz_validatedMessage_msgSenderOverwrite(bytes) (runs: 256, μ: 26853, ~: 26803) +EtherSenderReceiverTest_validatedMessage:testFuzz_validatedMessage_tokenAddressOverwrite(address) (runs: 256, μ: 26442, ~: 26442) EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 26593) EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 26464) EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 18882) @@ -184,29 +344,68 @@ Executor_applyAllowedCCVUpdates:test_applyAllowedCCVUpdates_AddNewCCV() (gas: 86 Executor_applyAllowedCCVUpdates:test_applyAllowedCCVUpdates_DisableAllowlist() (gas: 21309) Executor_applyAllowedCCVUpdates:test_applyAllowedCCVUpdates_RemoveExistingCCV() (gas: 23740) Executor_applyAllowedCCVUpdates:test_applyAllowedCCVUpdates_RemoveNonexistentCCV() (gas: 26608) +Executor_applyAllowedCCVUpdates:test_applyAllowedCCVUpdates_RevertWhen_CCVInvalid() (gas: 12981) +Executor_applyAllowedCCVUpdates:test_applyAllowedCCVUpdates_RevertWhen_NotOwner() (gas: 12090) Executor_applyDestChainUpdates:test_applyDestChainUpdates_AddExistingChain() (gas: 30089) Executor_applyDestChainUpdates:test_applyDestChainUpdates_AddNewChain() (gas: 101956) Executor_applyDestChainUpdates:test_applyDestChainUpdates_RemoveExistingChain() (gas: 25770) Executor_applyDestChainUpdates:test_applyDestChainUpdates_RemoveNonexistentChain() (gas: 25649) +Executor_applyDestChainUpdates:test_applyDestChainUpdates_RevertWhen_InvalidDestChain() (gas: 13433) +Executor_applyDestChainUpdates:test_applyDestChainUpdates_RevertWhen_OnlyCallableByOwner() (gas: 12142) Executor_getFee:test_getFee_EmptyMessage() (gas: 19295) +Executor_getFee:test_getFee_RevertWhen_ExceedsMaxCCVs() (gas: 20559) +Executor_getFee:test_getFee_RevertWhen_InvalidDestChain() (gas: 15163) +Executor_getFee:test_getFee_RevertWhen_InvalidRequestedFinality() (gas: 19667) +Executor_getFee:test_getFee_RevertWhen_UnsupportedRequiredCCV() (gas: 21914) +Executor_getMaxCCVsPerMessage:test_constructor_RevertWhen_InvalidMaxPossibleCCVsPerMsg() (gas: 60289) Executor_getMaxCCVsPerMessage:test_getMaxCCVsPerMessage() (gas: 1277516) Executor_setDynamicConfig:test_setDynamicConfig() (gas: 26559) +Executor_setDynamicConfig:test_setDynamicConfig_RevertWhen_OnlyCallableByOwner() (gas: 12145) Executor_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 216084) Executor_withdrawFeeTokens:test_withdrawFeeTokens_MultipleTokens() (gas: 1773171) ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_Empty() (gas: 12724) ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_MaxBitmap() (gas: 12164) +ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_RevertWhen_EXTRA_ARGS_STATIC_LENGTH_FIELDS() (gas: 12789) +ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_RevertWhen_InvalidExtraArgsTag() (gas: 12761) +ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_RevertWhen_InvalidUseATA() (gas: 13011) +ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_RevertWhen_SVM_EXECUTOR_ACCOUNTS_CONTENT() (gas: 12743) +ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_RevertWhen_SVM_EXECUTOR_FINAL_OFFSET() (gas: 13968) ExtraArgsCodecSVM_Test:test__decodeSVMExecutorArgsV1_WithAccounts() (gas: 13940) +ExtraArgsCodecSVM_Test:test__encodeSVMExecutorArgsV1_RevertWhen_ENCODE_SVM_ACCOUNTS_LENGTH() (gas: 6068) +ExtraArgsCodecSui_Test:test__decodeSuiExecutorArgsV1_RevertWhen_EXTRA_ARGS_STATIC_LENGTH_FIELDS() (gas: 12333) +ExtraArgsCodecSui_Test:test__decodeSuiExecutorArgsV1_RevertWhen_InvalidExtraArgsTag() (gas: 12396) +ExtraArgsCodecSui_Test:test__decodeSuiExecutorArgsV1_RevertWhen_SUI_EXECUTOR_FINAL_OFFSET() (gas: 13274) +ExtraArgsCodecSui_Test:test__decodeSuiExecutorArgsV1_RevertWhen_SUI_EXECUTOR_OBJECT_IDS_CONTENT() (gas: 12649) ExtraArgsCodecSui_Test:test__decodeSuiExecutorArgsV1_WithObjectIds() (gas: 12760) ExtraArgsCodecSui_Test:test__ecodeSuiExecutorArgsV1_NoObjectIds() (gas: 11272) +ExtraArgsCodecSui_Test:test__encodeSuiExecutorArgsV1_RevertWhen_ENCODE_SUI_OBJECT_IDS_LENGTH() (gas: 5920) ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_Basic() (gas: 19910) ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_MaxValues() (gas: 18750) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EXTRA_ARGS_CCV_ADDRESS_CONTENT() (gas: 25746) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EXTRA_ARGS_CCV_ADDRESS_LENGTH() (gas: 24743) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EXTRA_ARGS_CCV_ARGS_CONTENT() (gas: 22189) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EXTRA_ARGS_CCV_ARGS_LENGTH() (gas: 21999) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EXTRA_ARGS_EXECUTOR_CONTENT() (gas: 19871) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EXTRA_ARGS_FINAL_OFFSET() (gas: 20172) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EXTRA_ARGS_STATIC_LENGTH_FIELDS() (gas: 14983) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_EncodingSizeMismatch() (gas: 19404) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_InvalidCCVAddressLength() (gas: 16348) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_InvalidExecutorLength() (gas: 16099) +ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_RevertWhen_InvalidExtraArgsTag() (gas: 15291) ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_WithCCVs() (gas: 33248) ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_WithExecutor() (gas: 22102) ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_WithTokenArgs() (gas: 22835) ExtraArgsCodecV3_Test:test__decodeGenericExtraArgsV3_ZeroValues() (gas: 18928) +ExtraArgsCodecV3_Test:test__encodeGenericExtraArgsV3_RevertWhen_CCVArrayLengthMismatch() (gas: 5053) +ExtraArgsCodecV3_Test:test__encodeGenericExtraArgsV3_RevertWhen_ENCODE_CCVS_ARRAY_LENGTH() (gas: 20371) +ExtraArgsCodecV3_Test:test__encodeGenericExtraArgsV3_RevertWhen_ENCODE_EXECUTOR_ARGS_LENGTH() (gas: 26058) +ExtraArgsCodecV3_Test:test__encodeGenericExtraArgsV3_RevertWhen_ENCODE_TOKEN_ARGS_LENGTH() (gas: 26162) +ExtraArgsCodecV3_Test:test__encodeGenericExtraArgsV3_RevertWhen_ENCODE_TOKEN_RECEIVER_LENGTH() (gas: 5104) ExtraArgsCodecV3_Test:test__getBasicEncodedExtraArgsV3FastConfirmationRule() (gas: 4438) ExtraArgsCodecV3_Test:test__getBasicEncodedExtraArgsV3_ReturnsCorrectLength() (gas: 3984) +ExtraArgsCodec_Test:testFuzz__encodeGenericExtraArgsV3_Differential_Identical(uint32,uint16,address[9],bytes[9],address,bytes,bytes,bytes) (runs: 4096, μ: 184950, ~: 186668) ExtraArgsCodec_Test:test_GENERIC_EXTRA_ARGS_V3_TAG_keccak256_tag() (gas: 3298) +ExtraArgsCodec_Test:test__decodeGenericExtraArgsV3_RevertWhen_InvalidExecutorLength() (gas: 16033) ExtraArgsCodec_Test:test__encodeGenericExtraArgsV3_AllDynamicArgsDefaultValues() (gas: 22105) ExtraArgsCodec_Test:test__encodeGenericExtraArgsV3_ExecutorNonZeroAddress() (gas: 24035) ExtraArgsCodec_Test:test__encodeGenericExtraArgsV3_WithCCVs() (gas: 40878) @@ -216,16 +415,33 @@ ExtraArgsCodec_Test:test_gas_decode_abi_encode() (gas: 10287) ExtraArgsCodec_Test:test_gas_decode_abi_packed() (gas: 9238) ExtraArgsCodec_Test:test_gas_decode_empty_abi_encode() (gas: 8422) ExtraArgsCodec_Test:test_gas_decode_empty_packed() (gas: 6570) +FeeQuoter_applyDestChainConfigUpdates:testFuzz_applyDestChainConfigUpdates((uint64,(bool,uint32,uint32,uint32,uint8,bytes4,uint16,uint32,uint32,uint16,uint8))) (runs: 256, μ: 215287, ~: 215237) FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates() (gas: 330027) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_DefaultTxGasLimitEqZero() (gas: 15794) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_DefaultTxGasLimitGtMaxPerMessageGasLimit() (gas: 36789) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_InvalidDestChainConfigDestChainSelectorEqZero() (gas: 15788) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_InvalidDestChainConfig_ChainFamilySelectorEqZero() (gas: 16314) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_InvalidDestChainConfig_LinkFeeMultiplierPercentEqZero() (gas: 16254) FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_ZeroInputDoesNotEmitLog() (gas: 13248) FeeQuoter_applyDestChainConfigUpdates:test_getAllDestChainConfigs() (gas: 226624) FeeQuoter_applyFeeTokensUpdates:test_applyFeeTokensUpdates() (gas: 68914) +FeeQuoter_applyFeeTokensUpdates:test_applyFeeTokensUpdates_RevertWhen_OnlyCallableByOwner() (gas: 11648) +FeeQuoter_applyTokenTransferFeeConfigUpdates:testFuzz_applyTokenTransferFeeConfigUpdates((uint32,uint32,uint32,bool)[2]) (runs: 256, μ: 367049, ~: 367284) FeeQuoter_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates() (gas: 157912) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_InvalidDestBytesOverhead() (gas: 17125) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_InvalidDestChainConfig_DestChainSelectorEqZero() (gas: 15750) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_OnlyCallableByOwner() (gas: 12461) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_TokenTransferConfigMustBeEnabled() (gas: 16900) FeeQuoter_applyTokenTransferFeeConfigUpdates:test_getAllTokenTransferFeeConfigs() (gas: 285892) FeeQuoter_applyTokenTransferFeeConfigUpdates:test_getAllTokenTransferFeeConfigs_ReturnsEmptyStructsForUnconfiguredTokens() (gas: 40511) FeeQuoter_constructor:test_constructor() (gas: 5154081) +FeeQuoter_constructor:test_constructor_RevertWhen_InvalidLinkTokenEqZeroAddress() (gas: 95766) +FeeQuoter_constructor:test_constructor_RevertWhen_InvalidMaxFeeJuelsPerMsg() (gas: 100306) +FeeQuoter_convertTokenAmount:testFuzz_convertTokenAmount(uint256,uint224,uint160,uint224) (runs: 256, μ: 180068, ~: 179783) FeeQuoter_convertTokenAmount:test_convertTokenAmount() (gas: 68235) +FeeQuoter_convertTokenAmount:test_convertTokenAmount_RevertWhen_TokenNotSupported() (gas: 23965) FeeQuoter_getTokenAndGasPrices:test_getTokenAndGasPrices() (gas: 71243) +FeeQuoter_getTokenAndGasPrices:test_getTokenAndGasPrices_RevertWhen_UnsupportedChain() (gas: 16862) FeeQuoter_getTokenAndGasPrices:test_getTokenAndGasPrices_ZeroGasPrice() (gas: 132223) FeeQuoter_getTokenPrices:test_getTokenPrices() (gas: 78916) FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_ZeroFeeConfigChargesMinFee() (gas: 39142) @@ -239,25 +455,60 @@ FeeQuoter_getValidatedFee:test_getValidatedFee_Aptos() (gas: 51144) FeeQuoter_getValidatedFee:test_getValidatedFee_EmptyMessage() (gas: 52798) FeeQuoter_getValidatedFee:test_getValidatedFee_HighGasMessage() (gas: 219191) FeeQuoter_getValidatedFee:test_getValidatedFee_MessageWithDataAndTokenTransfer() (gas: 57178) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_DestinationChainNotEnabled() (gas: 16883) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_GasLimitTooHighSui() (gas: 45963) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_InvalidChainFamilySelector() (gas: 42310) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_InvalidEVMAddress() (gas: 23313) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_MaxSuiExtraArgsAccounts() (gas: 62601) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_MessageGasLimitTooHigh() (gas: 21559) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_MessageTooLarge() (gas: 105370) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_MessageTooLargeSui() (gas: 128528) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_MsgRecieverIsEmptyForMsgSendSui() (gas: 47571) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_NoGasPriceAvailable() (gas: 114654) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_NotAFeeToken() (gas: 20097) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_ReceiverInPrecompileSpaceSui() (gas: 48187) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_TooManyTokens() (gas: 21529) +FeeQuoter_getValidatedFee:test_getValidatedFee_RevertWhen_UnsupportedNumOfTokensSui() (gas: 43931) FeeQuoter_getValidatedFee:test_getValidatedFee_SUI() (gas: 53225) FeeQuoter_getValidatedFee:test_getValidatedFee_SVM() (gas: 53877) FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_FeeIncreasesWithAccounts() (gas: 68278) +FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_RevertWhen_InvalidSVMExtraArgsWritableBitmap() (gas: 48186) +FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_RevertWhen_InvalidTokenReceiver_MessageWithTokenAndInvalidTokenReceiver() (gas: 46732) +FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_RevertWhen_MessageTooLarge_DueToDataAndAccounts() (gas: 52088) +FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_RevertWhen_MessageTooLarge_DueToDataAndToken() (gas: 54147) +FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_RevertWhen_MessageTooLarge_DueToDataTokenAndAccounts() (gas: 97022) +FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_RevertWhen_TooManySVMExtraArgsAccounts() (gas: 61941) +FeeQuoter_getValidatedFee:test_getValidatedFee_SVM_RevertWhen_TooManySVMExtraArgsAccounts_WhenReceiverIsEmpty() (gas: 47164) FeeQuoter_getValidatedFee:test_getValidatedFee_Sui() (gas: 49448) +FeeQuoter_getValidatedFee:test_getValidatedFee_Sui_RevertWhen_InvalidExtraArgsData() (gas: 43303) +FeeQuoter_getValidatedFee:test_getValidatedFee_Sui_RevertWhen_InvalidExtraArgsTag() (gas: 42801) +FeeQuoter_getValidatedFee:test_getValidatedFee_Sui_RevertWhen_TooManySuiExtraArgsReceiverObjectIds_moreThanHardCodedMax() (gas: 46860) FeeQuoter_getValidatedFee:test_getValidatedFee_Sui_tokenTransferAndMsgReceiver() (gas: 46815) FeeQuoter_getValidatedFee:test_getValidatedFee_messageWithToken() (gas: 57678) FeeQuoter_getValidatedFee:test_tokenTransferAndMsgReciever_Sui() (gas: 78899) FeeQuoter_getValidatedFee:test_tokenTransferValidatedFee_Sui() (gas: 77092) FeeQuoter_getValidatedTokenPrice:test_getValidatedTokenPrice() (gas: 59226) +FeeQuoter_getValidatedTokenPrice:test_getValidatedTokenPrice_RevertWhen_TokenNotSupported() (gas: 11772) FeeQuoter_parseSVMExtraArgsFromBytes:test_SVMExtraArgsV1TagSelector() (gas: 3089) +FeeQuoter_parseSVMExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_RevertWhen_ExtraArgsAreEmpty() (gas: 15656) +FeeQuoter_parseSVMExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_RevertWhen_InvalidExtraArgsTag() (gas: 16146) +FeeQuoter_parseSVMExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_RevertWhen_SVMMessageGasLimitTooHigh() (gas: 18810) FeeQuoter_parseSVMExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_SVMExtraArgsV1() (gas: 20218) FeeQuoter_parseSuiExtraArgsFromBytes:test_SuiExtraArgsV1TagSelector() (gas: 3431) +FeeQuoter_parseSuiExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_RevertWhen_ExtraArgsAreEmpty() (gas: 15982) +FeeQuoter_parseSuiExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_RevertWhen_InvalidExtraArgsTag() (gas: 16457) +FeeQuoter_parseSuiExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_RevertWhen_SuiMessageGasLimitTooHigh() (gas: 19391) FeeQuoter_parseSuiExtraArgsFromBytes:test_parseSuiExtraArgsFromBytes_SuiExtraArgsV1() (gas: 20534) FeeQuoter_processChainFamilySelector:test_processChainFamilySelector_Aptos() (gas: 20944) FeeQuoter_processChainFamilySelector:test_processChainFamilySelector_EVM() (gas: 20878) +FeeQuoter_processChainFamilySelector:test_processChainFamilySelector_RevertWhen_InvalidChainFamilySelector() (gas: 16256) FeeQuoter_processChainFamilySelector:test_processChainFamilySelector_SVM_NoTokenTransfer() (gas: 22335) FeeQuoter_processChainFamilySelector:test_processChainFamilySelector_SVM_WithTokenTransfer() (gas: 23333) FeeQuoter_processChainFamilySelector:test_processChainFamilySelector_Sui_NoTokenTransfer() (gas: 22502) FeeQuoter_processChainFamilySelector:test_processChainFamilySelector_Sui_WithTokenTransfer() (gas: 24001) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_InvalidExtraArgs() (gas: 20591) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_MalformedEVMExtraArgs() (gas: 21346) +FeeQuoter_processMessageArgs:test_RevertWhen_processMessageArgs_MessageFeeTooHigh() (gas: 18339) FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2() (gas: 27029) FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount() (gas: 29757) FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1() (gas: 27079) @@ -266,6 +517,12 @@ FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount() (gas: FeeQuoter_processMessageArgs:test_processMessageArgs_WithSVMExtraArgsV1() (gas: 55560) FeeQuoter_processMessageArgs:test_processMessageArgs_WithSuiExtraArgsV1() (gas: 56783) FeeQuoter_processPoolReturnData:test_processPoolReturnData() (gas: 49810) +FeeQuoter_processPoolReturnData:test_processPoolReturnData_RevertWhen_InvalidEVMAddressDestToken() (gas: 43437) +FeeQuoter_processPoolReturnData:test_processPoolReturnData_RevertWhen_SourceTokenDataTooLarge() (gas: 157094) +FeeQuoter_quoteGasForExec:test_quoteGasForExec_RevertWhen_DestinationChainNotEnabled() (gas: 15243) +FeeQuoter_quoteGasForExec:test_quoteGasForExec_RevertWhen_MessageGasLimitTooHigh() (gas: 14902) +FeeQuoter_quoteGasForExec:test_quoteGasForExec_RevertWhen_MessageTooLarge() (gas: 15567) +FeeQuoter_quoteGasForExec:test_quoteGasForExec_RevertWhen_NoGasPriceAvailable() (gas: 104127) FeeQuoter_quoteGasForExec:test_quoteGasForExec_WithBothGasTypes() (gas: 20812) FeeQuoter_quoteGasForExec:test_quoteGasForExec_ZeroCalldata() (gas: 20515) FeeQuoter_quoteGasForExec:test_quoteGasForExec_ZeroNonCalldataGas() (gas: 20832) @@ -274,24 +531,38 @@ FeeQuoter_resolveGasLimitForDestination:test_EVMExtraArgsV2TagSelector() (gas: 3 FeeQuoter_resolveGasLimitForDestination:test_parseEVMExtraArgsFromBytes_EVMExtraArgsDefault() (gas: 13505) FeeQuoter_resolveGasLimitForDestination:test_parseEVMExtraArgsFromBytes_EVMExtraArgsV1() (gas: 14692) FeeQuoter_resolveGasLimitForDestination:test_parseEVMExtraArgsFromBytes_EVMExtraArgsV2() (gas: 15144) +FeeQuoter_resolveGasLimitForDestination:test_parseEVMExtraArgsFromBytes_RevertWhen_EVMExtraArgsGasLimitTooHigh() (gas: 15019) +FeeQuoter_resolveGasLimitForDestination:test_parseEVMExtraArgsFromBytes_RevertWhen_EVMExtraArgsInvalidExtraArgsTag() (gas: 14420) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_Aptos() (gas: 39909) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_EVM() (gas: 36889) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_EVM_DefaultGasLimit() (gas: 53005) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_EVM_MaxGasLimit() (gas: 54269) +FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_RevertWhen_InvalidExtraArgsData_SUI_EmptyExtraArgs() (gas: 38099) +FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_RevertWhen_InvalidExtraArgsTag() (gas: 38337) +FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_RevertWhen_MessageGasLimitTooHigh_EVM() (gas: 53577) +FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_RevertWhen_MessageGasLimitTooHigh_SUI() (gas: 55047) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_SVM() (gas: 43654) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_SVM_NoAccounts() (gas: 42294) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_Sui() (gas: 43612) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_Sui_NoObjectIds() (gas: 41803) FeeQuoter_resolveLegacyArgs:test_resolveLegacyArgs_TVM() (gas: 40041) FeeQuoter_updatePrices:test_updatePrices_AddsFeeTokenWhenTokenNotInSet() (gas: 116397) +FeeQuoter_updatePrices:test_updatePrices_RevertWhen_UnauthorizedCaller() (gas: 12643) FeeQuoter_updatePrices:test_updatePrices_onlyGasPrice() (gas: 24501) FeeQuoter_updatePrices:test_updatePrices_onlyTokenPrice() (gas: 31674) FeeQuoter_updatePrices:test_updatePrices_updatableByAuthorizedCaller() (gas: 78608) FeeQuoter_updatePrices:test_updatePrices_updateMultiplePrices() (gas: 206469) FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_Aptos() (gas: 7276) +FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_Aptos_RevertWhen_Invalid32ByteAddress() (gas: 11850) +FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_EVM_RevertWhen_InvalidEVMAddress() (gas: 11256) +FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_EVM_RevertWhen_InvalidEVMAddressEncodePacked() (gas: 11427) +FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_EVM_RevertWhen_InvalidEVMAddressPrecompiles() (gas: 4354378) FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_EVMs() (gas: 7356) +FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_RevertWhen_InvalidChainFamilySelector() (gas: 10738) FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_SVM() (gas: 7034) +FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_SVM_RevertWhen_Invalid32ByteAddress() (gas: 11554) FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_Sui() (gas: 7386) +FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_Sui_RevertWhen_Invalid32ByteAddress() (gas: 11510) FeeQuoter_validateDestFamilyAddress:test_validateDestFamilyAddress_TVM() (gas: 7750) FeeTokenHandler_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 214683) FinalityCodec__encodeBlockDepth:test__encodeBlockDepth() (gas: 14772) @@ -302,22 +573,46 @@ FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllow FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_AllowedWhen_ReservedFlagOverlap() (gas: 7893) FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_AllowedWhen_UpperFlagBitsOverlap() (gas: 7514) FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_FinalityAlwaysAllowed() (gas: 8138) +FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_RevertWhen_InvalidBlockDepth_NoMatchingFlagAndRequestedDepthExceedsAllowed() (gas: 10196) +FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_RevertWhen_InvalidBlockDepth_RequestedDepthBelowMinimum() (gas: 10024) +FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_RevertWhen_InvalidBlockDepth_RequestedSafeButAllowedIsDepthOnly() (gas: 11501) +FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_RevertWhen_InvalidRequestedFinality_FinalityRequired() (gas: 10093) +FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_RevertWhen_InvalidRequestedFinality_ReservedFlagNotInAllowed() (gas: 11498) +FinalityCodec__ensureRequestedFinalityAllowed:test__ensureRequestedFinalityAllowed_RevertWhen_MalformedRequest_FlagAndDepthCombined() (gas: 11155) FinalityCodec__validateRequestedFinality:test__validateRequestedFinality_PureBlockDepth_Boundaries() (gas: 7822) +FinalityCodec__validateRequestedFinality:test__validateRequestedFinality_RevertWhen_InvalidRequestedFinality_FlagWithNonZeroDepth() (gas: 10827) +FinalityCodec__validateRequestedFinality:test__validateRequestedFinality_RevertWhen_InvalidRequestedFinality_MultipleFlagBits() (gas: 10874) FinalityCodec__validateRequestedFinality:test__validateRequestedFinality_WaitForFinality() (gas: 5648) FinalityCodec__validateRequestedFinality:test__validateRequestedFinality_WaitForSafe() (gas: 7388) Internal_ChainFamilySelectors:test_ChainFamilySelectors_CorrectValues() (gas: 4788) Internal_validate32ByteAddress:test_validate32ByteAddress_BoundaryMinValue() (gas: 533) +Internal_validate32ByteAddress:test_validate32ByteAddress_RevertWhen_AddressBelowMinValue() (gas: 4940) +Internal_validate32ByteAddress:test_validate32ByteAddress_RevertWhen_AptosPrecompileAddress() (gas: 4893) +Internal_validate32ByteAddress:test_validate32ByteAddress_RevertWhen_InvalidLength() (gas: 4447) Internal_validate32ByteAddress:test_validate32ByteAddress_ValidAddress() (gas: 628) Internal_validateEVMAddress:test_validateEVMAddress_BoundaryAddresses() (gas: 984) +Internal_validateEVMAddress:test_validateEVMAddress_RevertWhen_InvalidLength() (gas: 4400) +Internal_validateEVMAddress:test_validateEVMAddress_RevertWhen_OversizedAddress() (gas: 4725) +Internal_validateEVMAddress:test_validateEVMAddress_RevertWhen_PrecompileAddress() (gas: 4936) Internal_validateEVMAddress:test_validateEVMAddress_ValidAddress() (gas: 586) Internal_validateTVMAddress:test_validateTVMAddress_BasechainAddress() (gas: 287) Internal_validateTVMAddress:test_validateTVMAddress_MasterchainAddress() (gas: 595) Internal_validateTVMAddress:test_validateTVMAddress_MinimalNonZeroAccountId() (gas: 857) +Internal_validateTVMAddress:test_validateTVMAddress_RevertWhen_LongLength() (gas: 4715) +Internal_validateTVMAddress:test_validateTVMAddress_RevertWhen_ShortLength() (gas: 4876) +Internal_validateTVMAddress:test_validateTVMAddress_RevertWhen_ZeroAccountId() (gas: 4994) LockReleaseTokenPool_constructor:test_constructor() (gas: 6293237) +LockReleaseTokenPool_constructor:test_constructor_RevertWhen_InvalidToken() (gas: 3742119) +LockReleaseTokenPool_lockOrBurn:testFuzz_lockOrBurn_LockOrBurnNoAllowList(uint256) (runs: 256, μ: 250449, ~: 250278) LockReleaseTokenPool_lockOrBurn:test_lockOrBurnV2_WithFee() (gas: 279296) LockReleaseTokenPool_lockOrBurn:test_lockOrBurn_LockOrBurnWithAllowList() (gas: 286805) +LockReleaseTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_CursedByRMN_PoolBurnRevertNotHealthy() (gas: 35853) +LockReleaseTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_SenderNotAllowed_LockOrBurnWithAllowList() (gas: 53928) +LockReleaseTokenPool_releaseOrMint:testFuzz_releaseOrMint(address,uint256) (runs: 256, μ: 252785, ~: 252632) LockReleaseTokenPool_releaseOrMint:test_releaseOrMint() (gas: 234843) LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 247369) +LockReleaseTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_ChainNotAllowed() (gas: 77284) +LockReleaseTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_CursedByRMN_PoolMintNotHealthy() (gas: 29678) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10170) LombardTokenPool_constructor:test_constructor() (gas: 4566435) LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidMessageVersion() (gas: 102152) @@ -328,35 +623,81 @@ LombardTokenPool_getRequiredCCVs:test_getRequiredCCVs_ValidConfig_TwoCCVs() (gas LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12114) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14495) LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 251329) +LombardTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_OutboundImplementationNotFoundForVerifier() (gas: 192037) LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 323729) LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_AllowsRemoteAdapterTokenMatch() (gas: 336201) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_RevertWhen_InvalidReceiver() (gas: 146601) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_RevertWhen_PathNotExist() (gas: 50966) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_RevertWhen_RemoteTokenOrAdapterMismatch() (gas: 148501) LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5327994) LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 251535) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_RevertWhen_OutboundImplementationNotFoundForVerifier() (gas: 192093) LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 511754) +LombardTokenPool_releaseOrMint:test_releaseOrMint_V1_RevertWhen_ExecutionError() (gas: 481506) +LombardTokenPool_releaseOrMint:test_releaseOrMint_V1_RevertWhen_HashMismatch() (gas: 501513) LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 73909) +LombardTokenPool_removePath:test_removePath_RevertWhen_PathMissing() (gas: 18394) LombardTokenPool_setPath:test_setPath() (gas: 92987) +LombardTokenPool_setPath:test_setPath_RevertWhen_ChainNotSupported() (gas: 16675) +LombardTokenPool_setPath:test_setPath_RevertWhen_InvalidRemotePoolForChain() (gas: 17890) +LombardTokenPool_setPath:test_setPath_RevertWhen_ZeroLChainId() (gas: 15954) LombardVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_ByOwner() (gas: 142290) LombardVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_DisableAllowlist() (gas: 100455) LombardVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RemoveSenders() (gas: 155786) +LombardVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RevertWhen_AddingSendersWithAllowlistDisabled() (gas: 26535) +LombardVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RevertWhen_AddingZeroAddress() (gas: 17520) +LombardVerifier_applyAllowlistUpdates:test_applyAllowlistUpdates_RevertWhen_NotOwner() (gas: 12579) LombardVerifier_constructor:test_constructor() (gas: 12866) +LombardVerifier_constructor:test_constructor_RevertWhen_InvalidMessageVersion() (gas: 914528) +LombardVerifier_constructor:test_constructor_RevertWhen_VersionTagCannotBeZero() (gas: 99436) +LombardVerifier_constructor:test_constructor_RevertWhen_ZeroBridge() (gas: 142639) LombardVerifier_forwardToVerifier:test_forwardToVerifier() (gas: 159151) LombardVerifier_forwardToVerifier:test_forwardToVerifier_AllowsRemoteAdapterTokenMatch() (gas: 191746) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_CallerIsNotARampOnRouter() (gas: 52143) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_CursedByRMN() (gas: 40519) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_InvalidReceiver() (gas: 46644) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_MustTransferTokens() (gas: 18571) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_PathNotExist() (gas: 84138) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_RemoteChainNotSupported() (gas: 42903) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_RemoteTokenOrAdapterMismatch() (gas: 79043) +LombardVerifier_forwardToVerifier:test_forwardToVerifier_RevertWhen_TokenNotSupported() (gas: 49190) LombardVerifier_forwardToVerifier:test_forwardToVerifier_WithAdapter() (gas: 1961754) LombardVerifier_forwardToVerifier:test_forwardToVerifier_WithLocalAdapterAndRemoteAdapter() (gas: 1966307) LombardVerifier_removePaths:test_removePaths() (gas: 34750) +LombardVerifier_removePaths:test_removePaths_RevertWhen_OnlyCallableByOwner() (gas: 12487) +LombardVerifier_removePaths:test_removePaths_RevertWhen_PathNotExist() (gas: 19518) LombardVerifier_setAllowedFinalityConfig:test_setAllowedFinalityConfig() (gas: 37430) +LombardVerifier_setAllowedFinalityConfig:test_setAllowedFinalityConfig_RevertWhen_OnlyCallableByOwner() (gas: 11767) LombardVerifier_setPath:test_setPath() (gas: 118910) +LombardVerifier_setPath:test_setPath_RevertWhen_OnlyCallableByOwner() (gas: 12222) +LombardVerifier_setPath:test_setPath_RevertWhen_ZeroAllowedCaller() (gas: 12024) +LombardVerifier_setPath:test_setPath_RevertWhen_ZeroLombardChainId() (gas: 11648) LombardVerifier_setRemoteAdapters:test_setRemoteAdapters() (gas: 42679) +LombardVerifier_setRemoteAdapters:test_setRemoteAdapters_RevertWhen_OnlyCallableByOwner() (gas: 14524) +LombardVerifier_updateStorageLocations:test_updateStorageLocation_RevertWhen_OnlyCallableByOwner() (gas: 11773) LombardVerifier_updateStorageLocations:test_updateStorageLocations() (gas: 35436) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_AddToken() (gas: 1555664) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_AddTokenWithAdapter() (gas: 1696465) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_RemoveToken() (gas: 1501906) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_RemoveTokenWithAdapter() (gas: 1617172) +LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_RevertWhen_NotOwner() (gas: 11998) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_RotateAdapter_RevokesOldAdapterAllowance() (gas: 1817120) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_SameAdapter_NoRedundantRevoke() (gas: 1692785) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_SwitchFromAdapterToNoAdapter_RevokesAdapterAllowance() (gas: 1685111) LombardVerifier_updateSupportedTokens:test_updateSupportedTokens_SwitchFromNoAdapterToAdapter_RevokesBridgeAllowance() (gas: 1705950) LombardVerifier_verifyMessage:test_verifyMessage() (gas: 357769) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_CallerIsNotOffRamp() (gas: 26660) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_CursedByRMN() (gas: 38063) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_ExecutionError() (gas: 331662) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidAmount() (gas: 92740) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidMessageId() (gas: 358961) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidMessageLength() (gas: 336098) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidReceiver() (gas: 92913) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidSender() (gas: 94031) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidToken() (gas: 93775) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidVerifierResults_CcvDataTooShortForPayloadLengthField() (gas: 25046) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidVerifierResults_CcvDataTooShortForProof() (gas: 55928) +LombardVerifier_verifyMessage:test_verifyMessage_RevertWhen_InvalidVerifierResults_CcvDataTooShortForProofLengthField() (gas: 26076) LombardVerifier_verifyMessage:test_verifyMessage_WithLocalAdapter() (gas: 439134) LombardVerifier_versionTag:test_versionTag() (gas: 9067) LombardVerifier_versionTag:test_versionTag_MatchesExpectedHash() (gas: 3375) @@ -364,49 +705,141 @@ LombardVerifier_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 216912) LombardVerifier_withdrawFeeTokens:test_withdrawFeeTokens_MultipleTokens() (gas: 1773582) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46995) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_MaxLengthFields() (gas: 436379) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_DataContentTruncated() (gas: 73732) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_DestBlobContentTruncated() (gas: 67755) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_FinalOffsetMismatch() (gas: 73951) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_FinalityTruncated() (gas: 37146) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_InsufficientDataLength() (gas: 32964) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_InvalidTokenTransferVersion() (gas: 53233) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_InvalidVersion() (gas: 31204) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_OffRampAddressContentTruncated() (gas: 56191) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_OffRampAddressLengthTruncated() (gas: 52720) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_OnRampAddressContentTruncated() (gas: 48034) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_ReceiverContentTruncated() (gas: 67068) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_SenderLengthTruncated() (gas: 56820) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_TokenTransferAmountTruncated() (gas: 92112) +MessageV1Codec__decodeMessageV1:test__decodeMessageV1_RevertWhen_TokenTransferVersionTruncated() (gas: 88617) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_WithData() (gas: 58290) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_WithTokenTransfer() (gas: 92601) +MessageV1Codec__decodeTokenTransferV1:testFuzz__decodeTokenTransferV1_RoundTrip(uint256,bytes,bytes,bytes,bytes,bytes) (runs: 256, μ: 27342, ~: 27283) MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_BasicDecode() (gas: 21874) MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_EmptyFields() (gas: 20009) MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_MaxLengthFields() (gas: 875140) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_InvalidVersion() (gas: 16898) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtAmount() (gas: 15098) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtDestTokenContent() (gas: 16441) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtDestTokenLength() (gas: 16524) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtExtraDataContent() (gas: 17611) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtExtraDataLength() (gas: 17429) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtSourcePoolContent() (gas: 15225) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtSourcePoolLength() (gas: 15352) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtSourceTokenContent() (gas: 15987) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtSourceTokenLength() (gas: 15542) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtTokenReceiverContent() (gas: 17279) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtTokenReceiverLength() (gas: 16891) +MessageV1Codec__decodeTokenTransferV1:test__decodeTokenTransferV1_RevertWhen_TruncatedAtVersion() (gas: 14425) MessageV1Codec__encodeMessageV1:test__encodeMessageV1_EVMSource() (gas: 49297) MessageV1Codec__encodeMessageV1:test__encodeMessageV1_EmptyFields() (gas: 47329) MessageV1Codec__encodeMessageV1:test__encodeMessageV1_MaxLengthFields() (gas: 436483) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_DataTooLong() (gas: 228828) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_DestBlobTooLong() (gas: 228952) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_OffRampAddressTooLong() (gas: 19862) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_OnRampAddressTooLong() (gas: 20132) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_ReceiverAddressTooLong() (gas: 19982) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_SenderAddressTooLong() (gas: 19834) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_TokenTransferArrayTooLong() (gas: 27748) +MessageV1Codec__encodeMessageV1:test__encodeMessageV1_RevertWhen_TokenTransferBlobTooLargeForLengthPrefix() (gas: 411976) MessageV1Codec__encodeMessageV1:test__encodeMessageV1_WithData() (gas: 58367) MessageV1Codec__encodeMessageV1:test__encodeMessageV1_WithTokenTransfer() (gas: 92524) +MessageV1Codec__encodeTokenTransferV1:testFuzz__encodeTokenTransferV1(uint256,bytes,bytes,bytes,bytes,bytes) (runs: 256, μ: 28749, ~: 28690) MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_EVMAddresses() (gas: 22560) MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_EmptyAddresses() (gas: 20566) MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_MaxLengthAddresses() (gas: 65509) MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_MaxLengthExtraData() (gas: 804250) +MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_RevertWhen_DestTokenAddressTooLong() (gas: 4622) +MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_RevertWhen_ExtraDataTooLong() (gas: 25129) +MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_RevertWhen_SourcePoolAddressTooLong() (gas: 4603) +MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_RevertWhen_SourceTokenAddressTooLong() (gas: 4628) +MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_RevertWhen_TokenReceiverTooLong() (gas: 4682) MessageV1Codec__encodeTokenTransferV1:test__encodeTokenTransferV1_checkRawBytes() (gas: 26138) +MockRouterTest:test_RevertWhen_ccipSendWithInsufficientNativeTokens() (gas: 34308) +MockRouterTest:test_RevertWhen_ccipSendWithInvalidEVMExtraArgs() (gas: 107439) +MockRouterTest:test_RevertWhen_ccipSendWithInvalidMsgValue() (gas: 61543) +MockRouterTest:test_RevertWhen_ccipSendWithLinkFeeTokenbutInsufficientAllowance() (gas: 62843) MockRouterTest:test_ccipSendWithEVMExtraArgsV1() (gas: 110641) MockRouterTest:test_ccipSendWithEVMExtraArgsV2() (gas: 133074) MockRouterTest:test_ccipSendWithGenericExtraArgsV3() (gas: 67925) MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue() (gas: 122326) MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens() (gas: 44255) +OffRamp__getCCVsForMessage:testFuzz__getCCVsForMessage_MultipleDefaultsHandledCorrectly(uint8[],uint8[],uint8[]) (runs: 256, μ: 16433294, ~: 13103836) OffRamp__getCCVsForMessage:test__getCCVsForMessage_DeduplicatesOptionalAgainstRequired() (gas: 95746) +OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_RevertWhen_OnlyCallableByOwner() (gas: 11590) +OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_RevertWhen_ZeroAddressNotAllowed_DefaultCCV() (gas: 17526) +OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_RevertWhen_ZeroAddressNotAllowed_OnRamp() (gas: 23960) +OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_RevertWhen_ZeroAddressNotAllowed_Router() (gas: 17309) +OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_RevertWhen_ZeroAddressNotAllowed_ZeroAddressInDefaultCCVsArray() (gas: 17637) +OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_RevertWhen_ZeroAddressNotAllowed_ZeroInLaneMandatedCCVsArray() (gas: 19993) +OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_RevertWhen_ZeroChainSelectorNotAllowed() (gas: 19082) OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_multipleChains() (gas: 649751) OffRamp_applySourceChainConfigUpdates:test_applySourceChainConfigUpdates_updateExistingChain() (gas: 145771) OffRamp_constructor:test_constructor() (gas: 4746053) +OffRamp_constructor:test_constructor_RevertWhen_GasCannotBeZero() (gas: 125351) +OffRamp_constructor:test_constructor_RevertWhen_ZeroAddressNotAllowed_RMNRemote() (gas: 64442) +OffRamp_constructor:test_constructor_RevertWhen_ZeroAddressNotAllowed_TokenAdminRegistry() (gas: 66672) +OffRamp_constructor:test_constructor_RevertWhen_ZeroChainSelectorNotAllowed() (gas: 66870) OffRamp_ensureCCVQuorumIsReached:test_ensureCCVQuorumIsReached_AllCCVsFound() (gas: 90535) OffRamp_ensureCCVQuorumIsReached:test_ensureCCVQuorumIsReached_OptionalIsAlsoRequired() (gas: 58735) +OffRamp_ensureCCVQuorumIsReached:test_ensureCCVQuorumIsReached_RevertWhen_OptionalCCVQuorumNotReached() (gas: 60132) +OffRamp_ensureCCVQuorumIsReached:test_ensureCCVQuorumIsReached_RevertWhen_RequiredCCVMissing_LaneMandated() (gas: 65499) +OffRamp_ensureCCVQuorumIsReached:test_ensureCCVQuorumIsReached_RevertWhen_RequiredCCVMissing_Pool() (gas: 77866) +OffRamp_ensureCCVQuorumIsReached:test_ensureCCVQuorumIsReached_RevertWhen_RequiredCCVMissing_Receiver() (gas: 53194) OffRamp_ensureCCVQuorumIsReached:test_ensureCCVQuorumIsReached_Success_OptionalCCVsFound() (gas: 56572) OffRamp_execute:test_execute() (gas: 108370) OffRamp_execute:test_execute_InsufficientGasToCompleteTx_setsToFailure() (gas: 93794) OffRamp_execute:test_execute_ReentrancyGuardReentrantCall_Fails() (gas: 1214097) +OffRamp_execute:test_execute_RevertWhen_CursedByRMN() (gas: 50193) +OffRamp_execute:test_execute_RevertWhen_ExecuteSingleMessageFails() (gas: 77956) +OffRamp_execute:test_execute_RevertWhen_GasLimitOverrideLessThanMessageGasLimit() (gas: 150793) +OffRamp_execute:test_execute_RevertWhen_InvalidEVMAddress_Receiver() (gas: 54609) +OffRamp_execute:test_execute_RevertWhen_InvalidMessageDestChainSelector() (gas: 53829) +OffRamp_execute:test_execute_RevertWhen_InvalidOffRamp() (gas: 49307) +OffRamp_execute:test_execute_RevertWhen_InvalidOffRamp_InvalidLengthOtherwiseCorrectRamp() (gas: 413017) +OffRamp_execute:test_execute_RevertWhen_InvalidOnRamp() (gas: 56037) +OffRamp_execute:test_execute_RevertWhen_InvalidVerifierResultsLength() (gas: 54857) +OffRamp_execute:test_execute_RevertWhen_NoStateProgressMade() (gas: 93966) +OffRamp_execute:test_execute_RevertWhen_SkippedAlreadyExecutedMessage() (gas: 112693) +OffRamp_execute:test_execute_RevertWhen_SourceChainNotEnabled() (gas: 96570) OffRamp_execute:test_execute_RunsOutOfGasAndSetsStateToFailure() (gas: 93837) OffRamp_execute:test_execute_UsesGasLimitOverrideWhenGreaterThanMessageGasLimit() (gas: 217512) OffRamp_execute:test_execute_WithReceiver() (gas: 459808) OffRamp_executeSingleMessage:test_executeSingleMessage_PassActualTokenAmountToReceiver() (gas: 1591206) OffRamp_executeSingleMessage:test_executeSingleMessage_PassAmountReturnedByPoolToReceiver() (gas: 1588002) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_CCVValidationFails() (gas: 52910) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_CanOnlySelfCall() (gas: 12881) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_InboundImplementationNotFound() (gas: 44069) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_InvalidDestTokenAddressLength() (gas: 39315) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_InvalidEVMAddress_TokenAddress() (gas: 39379) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_InvalidNumberOfTokens() (gas: 53633) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_InvalidTokenReceiverLength() (gas: 40155) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_OptionalCCVQuorumNotReached() (gas: 56147) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_RequiredCCVMissing_LaneMandatedCCV() (gas: 131705) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_RequiredCCVMissing_PoolCCV() (gas: 70891) +OffRamp_executeSingleMessage:test_executeSingleMessage_RevertWhen_RequiredCCVMissing_ReceiverCCV() (gas: 56444) OffRamp_executeSingleMessage:test_executeSingleMessage_UsesGasLimitOverrideWhenNonZero() (gas: 1590902) OffRamp_getAllSourceChainConfigs:test_getAllSourceChainConfigs_ReturnsMultipleChains() (gas: 323089) OffRamp_getAllSourceChainConfigs:test_getAllSourceChainConfigs_ReturnsSingleChain() (gas: 43451) OffRamp_getBalanceOfReceiver:test_getBalanceOfReceiver() (gas: 13916) +OffRamp_getBalanceOfReceiver:test_getBalanceOfReceiver_RevertWhen_TokenHandlingError() (gas: 15983) OffRamp_getCCVsForMessage:test_getCCVsForMessage() (gas: 114926) +OffRamp_getCCVsForMessage:test_getCCVsForMessage_RevertWhen_InvalidReceiverAddress() (gas: 29695) OffRamp_getCCVsFromPool:test_getCCVsFromPool_ReturnsDefaultCCVs_WhenPoolDoesNotSupportV2() (gas: 276327) OffRamp_getCCVsFromPool:test_getCCVsFromPool_ReturnsDefaultCCVs_WhenPoolReturnsEmptyArray() (gas: 211775) OffRamp_getCCVsFromPool:test_getCCVsFromPool_ReturnsPoolCCVs_WhenPoolSupportsV2() (gas: 282511) +OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_RevertWhen_InvalidOptionalThreshold() (gas: 318018) +OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_RevertWhen_contractNoV2_FTF() (gas: 18789) +OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_RevertWhen_contractV2_FTF_AllowedConfigIsZero() (gas: 297139) +OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_RevertWhen_contractV2_FTF_BelowAllowedConfig() (gas: 272919) +OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_RevertWhen_noContract_FTF() (gas: 20637) OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_contractNoV2_fallsBackToDefaults() (gas: 18309) OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_contractNoV2_fallsBackToDefaults_WhenFinalized() (gas: 18133) OffRamp_getCCVsFromReceiver:test_getCCVsFromReceiver_contractV2_FTF_succeedsWhenFinalityExceedsAllowedConfig() (gas: 317349) @@ -429,22 +862,46 @@ OffRamp_releaseOrMintSingleToken:test_releaseOrMintSingleToken_CallsV1FunctionWh OffRamp_releaseOrMintSingleToken:test_releaseOrMintSingleToken_CallsV2Function() (gas: 141126) OffRamp_releaseOrMintSingleToken:test_releaseOrMintSingleToken_PropagatesPoolError() (gas: 46934) OffRamp_releaseOrMintSingleToken:test_releaseOrMintSingleToken_PropagatesPoolError_V1Pool() (gas: 48564) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintSingleToken_RevertWhen_NotACompatiblePool_PoolAddressZero() (gas: 30041) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintSingleToken_RevertWhen_NotACompatiblePool_UnsupportedInterface() (gas: 35581) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy() (gas: 457438) +OnRamp_addressEncodingCompatibility:test_applyDestChainConfigUpdates_RevertWhen_OffRampLengthMismatch() (gas: 43314) OnRamp_addressEncodingCompatibility:test_forwardFromRouter_DestTokenTrimsToDestLengthWhenPoolReturnsAbiEncoded() (gas: 448708) OnRamp_addressEncodingCompatibility:test_forwardFromRouter_ReceiverAbiEncodedTrimsToDestLength() (gas: 387331) OnRamp_addressEncodingCompatibility:test_forwardFromRouter_ReceiverAcceptsCustomNonEvmLength() (gas: 398172) OnRamp_addressEncodingCompatibility:test_forwardFromRouter_ReceiverAcceptsExactDestLength() (gas: 387240) +OnRamp_addressEncodingCompatibility:test_forwardFromRouter_RevertWhen_ReceiverLengthNotDestOr32() (gas: 89800) +OnRamp_addressEncodingCompatibility:test_forwardFromRouter_RevertWhen_ReceiverPaddingNonZero() (gas: 88269) +OnRamp_addressEncodingCompatibility:test_forwardFromRouter_RevertWhen_ReceiverShortFor32ByteChain() (gas: 115193) +OnRamp_addressEncodingCompatibility:test_forwardFromRouter_RevertWhen_TokenReceiverLengthNotDestOr32() (gas: 436247) +OnRamp_addressEncodingCompatibility:test_forwardFromRouter_RevertWhen_TokenReceiverPaddingNonZero() (gas: 435934) OnRamp_addressEncodingCompatibility:test_forwardFromRouter_SenderAbiEncodedForEvmDest() (gas: 388177) OnRamp_addressEncodingCompatibility:test_forwardFromRouter_TokenReceiverAbiEncodedTrimsToDestLength() (gas: 386638) OnRamp_addressEncodingCompatibility:test_forwardFromRouter_TokenReceiverAcceptsCustomNonEvmLength() (gas: 394038) OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_AllowsZeroRouterToPause() (gas: 205005) OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_NonEvmAddressLength() (gas: 226818) +OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_DefaultExecutorZero() (gas: 115530) +OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_DestIsLocalChain() (gas: 22284) +OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_InvalidDestChainConfig_ZeroAddressBytesLength() (gas: 22905) +OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_InvalidDestChainConfig_ZeroBaseExecutionGasCost() (gas: 22122) +OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_RevertWhen_InvalidDestChainConfig_ZeroSelector() (gas: 22386) OnRamp_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_SetsConfigAndEmitsEvent() (gas: 265111) OnRamp_applyDestChainConfigUpdates:test_getAllDestChainConfigs_ReturnsMultipleChains() (gas: 288998) OnRamp_constructor:test_constructor() (gas: 5664345) +OnRamp_constructor:test_constructor_RevertWhen_DynamicConfigInvalid() (gas: 132552) +OnRamp_constructor:test_constructor_RevertWhen_StaticConfigInvalid() (gas: 250619) OnRamp_distributeFees:test_distributeFees_NoTokens_PaysAllIssuers() (gas: 242363) OnRamp_distributeFees:test_distributeFees_TokenPoolV1RetainsInOnRamp() (gas: 254603) OnRamp_distributeFees:test_distributeFees_TokenPoolV2ReceivesShare() (gas: 275546) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_CanOnlySendOneTokenPerMessage() (gas: 59933) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_CursedByRMN() (gas: 18385) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_DestChainNotSupportedByCCV() (gas: 63853) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_InsufficientFeeTokenAmount() (gas: 124634) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_InvalidRequestedFinality_FlagWithNonZeroDepth() (gas: 44997) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_RouterMustSetOriginalSender() (gas: 22109) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_SourceTokenDataTooLarge() (gas: 227375) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_TokenReceiverNotAllowed() (gas: 45810) +OnRamp_forwardFromRouter:test_forwardFromRouter_RevertWhen_UnsupportedToken() (gas: 64487) OnRamp_forwardFromRouter:test_forwardFromRouter_UsesMessageNetworkFeeWhenNoTokens() (gas: 153773) OnRamp_forwardFromRouter:test_forwardFromRouter_UsesTokenNetworkFeeWhenTokens() (gas: 212677) OnRamp_forwardFromRouter:test_forwardFromRouter_messageNumberPersistsAndIncrements() (gas: 465855) @@ -462,6 +919,12 @@ OnRamp_getExecutionFee:test_getExecutionFee_NoExecutor() (gas: 27402) OnRamp_getExecutionFee:test_getExecutionFee_WithExecutor() (gas: 33207) OnRamp_getExecutionFee:test_getExecutionFee_ZeroGasLimit() (gas: 30005) OnRamp_getFee:test_getFee_AllowsTokenReceiverWhenEnabled() (gas: 105190) +OnRamp_getFee:test_getFee_RevertWhen_CanOnlySendOneTokenPerMessage() (gas: 16245) +OnRamp_getFee:test_getFee_RevertWhen_DestinationChainNotSupportedByCCV() (gas: 48439) +OnRamp_getFee:test_getFee_RevertWhen_ExceedsMaxFeePerMessage() (gas: 67283) +OnRamp_getFee:test_getFee_RevertWhen_InvalidDestChainSelector() (gas: 15879) +OnRamp_getFee:test_getFee_RevertWhen_InvalidRequestedFinality_FlagWithNonZeroDepth() (gas: 36631) +OnRamp_getFee:test_getFee_RevertWhen_TokenReceiverNotAllowed() (gas: 36918) OnRamp_getFee:test_getFee_UsesMessageNetworkFeeWhenNoTokens() (gas: 66042) OnRamp_getFee:test_getFee_UsesTokenNetworkFeeWhenTokens() (gas: 89334) OnRamp_getFee:test_getFee_WithCustomExecutorAndCCVs() (gas: 74153) @@ -479,6 +942,9 @@ OnRamp_getReceipts:test_getReceipts_WithTokens_PoolV2ReturnsZero_FallsBackToFeeQ OnRamp_getReceipts:test_getReceipts_multipleCCVs() (gas: 92643) OnRamp_lockOrBurnSingleToken:test_lockOrBurnSingleToken_CallPoolV1() (gas: 49573) OnRamp_lockOrBurnSingleToken:test_lockOrBurnSingleToken_CallPoolV2_UsesPoolV2Output() (gas: 51935) +OnRamp_lockOrBurnSingleToken:test_lockOrBurnSingleToken_RevertWhen_FTFNotSupportedOnPoolV1() (gas: 29660) +OnRamp_lockOrBurnSingleToken:test_lockOrBurnSingleToken_RevertWhen_TokenArgsNotSupportedOnPoolV1() (gas: 29820) +OnRamp_lockOrBurnSingleToken:test_lockOrBurnSingleToken_RevertWhen_UnsupportedToken_PoolDoesNotSupportCCIPPoolV1() (gas: 28989) OnRamp_mergeCCVLists:test_mergeCCVLists_DedupUserAndMandatoryCCVs() (gas: 43703) OnRamp_mergeCCVLists:test_mergeCCVLists_DedupUserAndPoolCCVs() (gas: 26487) OnRamp_mergeCCVLists:test_mergeCCVLists_NoChangesWhenPoolCCVAlreadyInRequired() (gas: 26245) @@ -491,44 +957,86 @@ OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_DefaultCCVsAlw OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_LegacyDoesNotAddDefaults_IsTokenTransferWithoutDataAndGasLimitZero() (gas: 50848) OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_OldExtraArgs() (gas: 65504) OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_PlaceholderAddsMissingDefaultsKeepsUserArgs() (gas: 85365) +OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_RevertWhen_NoDuplicatesAllowed_WithinRequiredCCVs() (gas: 49463) +OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_RevertWhen_TokenReceiverNotAllowed() (gas: 46266) OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_V3DoesNotAddDefaults_IsTokenTransferWithoutDataAndGasLimitZero() (gas: 43585) OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_V3WithEmptyRequiredCCVs() (gas: 56732) OnRamp_parseExtraArgsWithDefaults:test_parseExtraArgsWithDefaults_V3WithUserProvidedCCVs() (gas: 54626) OnRamp_setDynamicConfig:test_SetDynamicConfig() (gas: 36304) OnRamp_setDynamicConfig:test_SetDynamicConfig_MultipleUpdates() (gas: 42590) +OnRamp_setDynamicConfig:test_SetDynamicConfig_RevertWhen_InvalidConfig_ReentrancyGuardSet() (gas: 15078) +OnRamp_setDynamicConfig:test_SetDynamicConfig_RevertWhen_InvalidConfig_ZeroFeeQuoter() (gas: 13179) +OnRamp_setDynamicConfig:test_SetDynamicConfig_RevertWhen_OnlyCallableByOwner() (gas: 15521) +OnRamp_validateDestChainAddress:testFuzz_validateDestChainAddress_FastPathReturnsSame(bytes) (runs: 256, μ: 12650, ~: 12565) +OnRamp_validateDestChainAddress:testFuzz_validateDestChainAddress_MatchesInputLength(bytes) (runs: 256, μ: 12958, ~: 12772) +OnRamp_validateDestChainAddress:testFuzz_validateDestChainAddress_PaddedNoOverflow(uint8,bytes32) (runs: 256, μ: 24282, ~: 22275) +OnRamp_validateDestChainAddress:testFuzz_validateDestChainAddress_RevertWhen_PaddedHighBitsNonZero(uint8,bytes32) (runs: 256, μ: 20509, ~: 19728) +OnRamp_validateDestChainAddress:testFuzz_validateDestChainAddress_StripsAbiPadding(uint8) (runs: 256, μ: 21335, ~: 19469) OnRamp_validateDestChainAddress:test_validateDestChainAddress_20ByteAbiEncoded() (gas: 13935) OnRamp_validateDestChainAddress:test_validateDestChainAddress_20ByteExactMatch() (gas: 13475) +OnRamp_validateDestChainAddress:test_validateDestChainAddress_RevertWhen_21BytesFor20ByteAddress() (gas: 13497) +OnRamp_validateDestChainAddress:test_validateDestChainAddress_RevertWhen_AddressBytesLengthGt32() (gas: 13277) +OnRamp_validateDestChainAddress:test_validateDestChainAddress_RevertWhen_InvalidDestChainAddress_LengthTooLong() (gas: 13715) +OnRamp_validateDestChainAddress:test_validateDestChainAddress_RevertWhen_InvalidDestChainAddress_LengthTooShort() (gas: 13221) +OnRamp_validateDestChainAddress:test_validateDestChainAddress_RevertWhen_MismatchAndLengthAbove31() (gas: 13694) +OnRamp_validateDestChainAddress:test_validateDestChainAddress_RevertWhen_NonZeroPadding() (gas: 16255) OnRamp_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 216849) OnRamp_withdrawFeeTokens:test_withdrawFeeTokens_MultipleTokens() (gas: 1773406) PingPong_ccipReceive:test_CcipReceive() (gas: 238010) +PingPong_setCounterpart:testFuzz_CounterPartAddress_Success(uint64,address) (runs: 256, μ: 28824, ~: 28868) +PingPong_setCounterpartAddress:testFuzz_CounterPartAddress_Success(address) (runs: 256, μ: 22714, ~: 22714) +PingPong_setCounterpartChainSelector:testFuzz_CounterPartChainSelector_Success(uint64) (runs: 256, μ: 15092, ~: 15114) PingPong_setOutOfOrderExecution:test_OutOfOrderExecution() (gas: 20901) PingPong_setPaused:test_Pausing() (gas: 18247) PingPong_startPingPong:test_StartPingPong_With_OOO() (gas: 244842) PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered() (gas: 239774) Proxy_fallback:test_fallback() (gas: 17649) Proxy_setFeeAggregator:test_setFeeAggregator() (gas: 20129) +Proxy_setFeeAggregator:test_setFeeAggregator_RevertWhen_OnlyCallableByOwner() (gas: 12622) Proxy_setTarget:test_setTarget() (gas: 20095) +Proxy_setTarget:test_setTarget_RevertWhen_OnlyCallableByOwner() (gas: 12814) +Proxy_setTarget:test_setTarget_RevertWhen_ZeroAddressNotAllowed() (gas: 10890) Proxy_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 216372) Proxy_withdrawFeeTokens:test_withdrawFeeTokens_MultipleTokens() (gas: 1773160) RMNProxy_constructor:test_Constructor() (gas: 294118) -RMNProxy_isCursed:test_IsCursed_GlobalCurseSubject() (gas: 90243) +RMNProxy_isCursed:test_IsCursed_GlobalCurseSubject() (gas: 90194) +RMNProxy_isCursed:test_RevertWhen_call_ARMCallEmptyContract() (gas: 19286) +RMNProxy_isCursed:test_isCursed_RevertWhen_isCursedReasonForwarded() (gas: 20440) RMNProxy_setARM:test_SetARM() (gas: 16849) RMNProxy_setARM:test_SetARMzero() (gas: 11636) -RMNRemote_constructor:test_constructor() (gas: 8929) -RMNRemote_curse:test_curse() (gas: 150645) -RMNRemote_global_curses:test_isCursed_globalCurseSubject() (gas: 72420) -RMNRemote_isBlessed:test_isBlessed() (gas: 18472) -RMNRemote_setConfig:test_setConfig_addSigner_removeSigner() (gas: 997222) -RMNRemote_uncurse:test_uncurse() (gas: 40724) -RMNRemote_verify_withConfigSet:test_verify() (gas: 86983) +RMNRemote_curse:test_RevertWhen_curse_AlreadyCursed_duplicateSubject() (gas: 155242) +RMNRemote_curse:test_RevertWhen_curse_calledByNonOwner() (gas: 22109) +RMNRemote_curse:test_RevertWhen_curse_calledByRemovedCurseAdmin() (gas: 74646) +RMNRemote_curse:test_curse() (gas: 150550) +RMNRemote_curse:test_curse_ByCurseAdmin() (gas: 213192) +RMNRemote_curse:test_curse_ByNewlyAddedCurseAdmin() (gas: 212994) +RMNRemote_curse:test_curse_ByOwner_WhenCurseAdminsExist() (gas: 212104) +RMNRemote_global_curses:test_isCursed_globalCurseSubject() (gas: 72257) +RMNRemote_uncurse:test_RevertWhen_uncurse_NotCursed_duplicatedUncurseSubject() (gas: 52298) +RMNRemote_uncurse:test_RevertWhen_uncurse_calledByCurseAdmin() (gas: 92166) +RMNRemote_uncurse:test_RevertWhen_uncurse_calledByNonOwner() (gas: 19204) +RMNRemote_uncurse:test_uncurse() (gas: 40570) RateLimiter_constructor:test_Constructor() (gas: 19874) RateLimiter_consume:test_ConsumeAggregateValue() (gas: 29786) RateLimiter_consume:test_Refill() (gas: 33258) +RateLimiter_consume:test_RevertWhen_AggregateValueRateLimitReached() (gas: 22133) +RateLimiter_consume:test_RevertWhen_ConsumingMoreThanUint128() (gas: 16176) +RateLimiter_consume:test_RevertWhen_RateLimitReachedOverConsecutiveBlocks() (gas: 24110) +RateLimiter_consume:test_RevertWhen_TokenMaxCapacityExceeded() (gas: 18763) +RateLimiter_consume:test_RevertWhen_TokenRateLimitReached() (gas: 24139) RateLimiter_consume:test_consume_ConsumeWhenDisabled() (gas: 24393) RateLimiter_setTokenBucketConfig:test_setTokenBucketConfig_SettingConfigRefills() (gas: 40358) +RegistryModuleOwnerCustom_constructor:test_RevertWhen_constructor() (gas: 36185) +RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_RevertWhen_registerAccessControlDefaultAdmin() (gas: 20676) RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin() (gas: 132198) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_RevertWhen_registerAdminViaGetCCIPAdmin() (gas: 20990) RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin() (gas: 132171) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_RevertWhen_registerAdminViaOwner() (gas: 17193) RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner() (gas: 128616) +Router_applyRampUpdates:testFuzz_applyRampUpdates_OffRampUpdates(address[20]) (runs: 256, μ: 2465640, ~: 2465485) +Router_applyRampUpdates:testFuzz_applyRampUpdates_OnRampUpdates((uint64,address)[]) (runs: 256, μ: 3498226, ~: 3570798) +Router_applyRampUpdates:test_RevertWhen_applyRampUpdatesWhen_OffRampMismatch() (gas: 90727) +Router_applyRampUpdates:test_RevertWhen_applyRampUpdatesWhen_OnlyOwner() (gas: 12879) Router_applyRampUpdates:test_applyRampUpdates_OffRampUpdatesWithRouting() (gas: 10937119) Router_applyRampUpdates:test_applyRampUpdates_OnRampDisable() (gas: 58667) Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 185222) @@ -539,22 +1047,42 @@ Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 96307) Router_ccipSend:test_NativeFeeTokenOverpay() (gas: 276503) Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 88409) Router_ccipSend:test_NonLinkFeeToken() (gas: 245871) +Router_ccipSend:test_RevertWhen_FeeTokenAmountTooLow() (gas: 97618) +Router_ccipSend:test_RevertWhen_UnsupportedDestinationChain() (gas: 20810) +Router_ccipSend:test_RevertWhen_WhenNotHealthy() (gas: 18845) Router_ccipSend:test_WrappedNativeFeeToken() (gas: 277828) Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 192361) Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 338618) Router_constructor:test_Constructor() (gas: 13312) Router_getArmProxy:test_getArmProxy() (gas: 10647) Router_getFee:test_GetFeeSupportedChain() (gas: 82652) +Router_getFee:test_RevertWhen_UnsupportedDestinationChain() (gas: 16702) +Router_getSupportedTokens:test_RevertWhen_GetSupportedTokens() (gas: 11007) Router_recoverTokens:test_RecoverTokens() (gas: 52418) +Router_recoverTokens:test_RevertWhen_RecoverTokensInvalidRecipient() (gas: 11676) +Router_recoverTokens:test_RevertWhen_RecoverTokensNoFunds() (gas: 17950) +Router_recoverTokens:test_RevertWhen_RecoverTokensNonOwner() (gas: 11599) +Router_recoverTokens:test_RevertWhen_RecoverTokensValueReceiver() (gas: 691521) +Router_routeMessage:testFuzz_routeMessage_ExecutionEvent_Success(bytes) (runs: 256, μ: 91389, ~: 84034) +Router_routeMessage:test_RevertWhen_routeMessage_OnlyOffRamp() (gas: 20734) +Router_routeMessage:test_RevertWhen_routeMessage_WhenNotHealthy() (gas: 18159) Router_routeMessage:test_routeMessage_AutoExec() (gas: 41935) Router_routeMessage:test_routeMessage_ExecutionEvent() (gas: 157877) Router_routeMessage:test_routeMessage_ManualExec() (gas: 35138) +Router_setWrappedNative:testFuzz_SetWrappedNative_Success(address) (runs: 256, μ: 17215, ~: 17215) +Router_setWrappedNative:test_RevertWhen_OnlyOwner() (gas: 11214) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs() (gas: 134091) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_AllowsNoops() (gas: 66185) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_IsPerSource() (gas: 465400) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_LastUpdateWinsBeforeRemoval() (gas: 219970) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_MultipleChainsSingleCall_NoCrossPollination() (gas: 449664) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_RemovalEmitsEventAndClearsConfig() (gas: 57140) +SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_RevertWhen_CallerNotOwner() (gas: 14829) +SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_RevertWhen_DuplicateSigners() (gas: 131749) +SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_RevertWhen_EmptySignerArray() (gas: 13830) +SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_RevertWhen_ThresholdExceedsSignerCount() (gas: 14052) +SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_RevertWhen_ThresholdZero() (gas: 13794) +SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_RevertWhen_ZeroAddressSigner() (gas: 16774) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_SingleSignerThresholdOne() (gas: 68174) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_UpdatesExistingConfig() (gas: 165917) SignatureQuorumValidator_applySignatureConfigs:test_applySignatureConfigs_UpdatesTakePriorityWithinOneCall() (gas: 266369) @@ -573,10 +1101,21 @@ SignatureQuorumValidator_getSignatureConfig:test_getSignatureConfig_MultipleUpda SignatureQuorumValidator_getSignatureConfig:test_getSignatureConfig_SingleSigner() (gas: 68231) SignatureQuorumValidator_validateSignatures:test_validateSignatures_ExtraSignatures() (gas: 103451) SignatureQuorumValidator_validateSignatures:test_validateSignatures_MultipleSignatures() (gas: 107585) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_DuplicateSignatures() (gas: 96232) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_ForkedChain() (gas: 85420) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_InvalidSignatureLength() (gas: 79285) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_NoSignersConfiguredOnSource() (gas: 938248) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_SignaturesFromDifferentSource() (gas: 325552) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_UnauthorizedSigner() (gas: 86741) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_UnorderedSignatures() (gas: 100524) +SignatureQuorumValidator_validateSignatures:test_validateSignatures_RevertWhen_WrongNumberOfSignatures() (gas: 91352) SiloedLockReleaseTokenPool_configureLockBoxes:test_configureLockBoxes() (gas: 915700) +SiloedLockReleaseTokenPool_configureLockBoxes:test_configureLockBoxes_RevertWhen_InvalidToken() (gas: 753990) +SiloedLockReleaseTokenPool_configureLockBoxes:test_configureLockBoxes_RevertWhen_ZeroAddressInvalid() (gas: 12817) SiloedLockReleaseTokenPool_constructor:test_constructor() (gas: 5700541) SiloedLockReleaseTokenPool_getAllLockBoxConfigs:test_getAllLockBoxConfigs() (gas: 260599) SiloedLockReleaseTokenPool_getLockBox:test_getLockBox() (gas: 19819) +SiloedLockReleaseTokenPool_getLockBox:test_getLockBox_RevertWhen_LockBoxNotConfigured() (gas: 14122) SiloedLockReleaseTokenPool_lockOrBurn:test_lockOrBurnV2_SiloedFundsWithFee() (gas: 300606) SiloedLockReleaseTokenPool_lockOrBurn:test_lockOrBurn_ResetsAllowanceAfterDeposit() (gas: 806102) SiloedLockReleaseTokenPool_lockOrBurn:test_lockOrBurn_SiloedFunds() (gas: 271348) @@ -585,35 +1124,65 @@ SiloedLockReleaseTokenPool_releaseOrMint:test_ReleaseOrMintV2_SiloedChain() (gas SiloedLockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_SiloedChain() (gas: 306439) SiloedLockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_UnsiloedChain() (gas: 306051) SiloedUSDCTokenPool_burnLockedUSDC:test_burnLockedUSDC() (gas: 428570) +SiloedUSDCTokenPool_burnLockedUSDC:test_burnLockedUSDC_RevertWhen_NoMigrationProposalPending() (gas: 39677) +SiloedUSDCTokenPool_burnLockedUSDC:test_burnLockedUSDC_RevertWhen_OnlyCircle() (gas: 290723) SiloedUSDCTokenPool_burnLockedUSDC:test_burnLockedUSDC_UsesConfiguredSnapshotAmount() (gas: 576508) +SiloedUSDCTokenPool_burnLockedUSDC:test_setLockedUSDCToBurn_RevertWhen_InvalidChainSelector() (gas: 11585) SiloedUSDCTokenPool_cancelExistingCCTPMigrationProposal:test_cancelExistingCCTPMigrationProposal() (gas: 33538) SiloedUSDCTokenPool_cancelExistingCCTPMigrationProposal:test_cancelExistingCCTPMigrationProposal_ResetsExcludedTokens() (gas: 254089) +SiloedUSDCTokenPool_cancelExistingCCTPMigrationProposal:test_cancelExistingCCTPMigrationProposal_RevertWhen_NoProposalPending() (gas: 13252) SiloedUSDCTokenPool_configureLockBoxes:test_configureLockBoxes() (gas: 1663243) +SiloedUSDCTokenPool_configureLockBoxes:test_configureLockBoxes_RevertWhen_LockBoxCannotBeShared() (gas: 42962) SiloedUSDCTokenPool_excludeTokensFromBurn:test_excludeTokensFromBurn() (gas: 251365) +SiloedUSDCTokenPool_excludeTokensFromBurn:test_excludeTokensFromBurn_RevertWhen_InvalidChainSelector() (gas: 11937) +SiloedUSDCTokenPool_excludeTokensFromBurn:test_excludeTokensFromBurn_RevertWhen_NoMigrationProposalPending() (gas: 14170) SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurnV2_WithFee() (gas: 233961) SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurn_MultipleLocks() (gas: 137522) +SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_ChainNotSupported() (gas: 30871) +SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_NotAllowedOnRamp() (gas: 39022) +SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurn_RevertWhen_NotAllowedTokenPoolProxy() (gas: 39308) SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurn_Success() (gas: 110482) SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurn_UpdatesLockedTokensAccounting() (gas: 105572) SiloedUSDCTokenPool_lockOrBurn:test_lockOrBurn_UpdatesTokensAccounting() (gas: 105528) SiloedUSDCTokenPool_proposeCCTPMigration:test_proposeCCTPMigration() (gas: 40220) SiloedUSDCTokenPool_proposeCCTPMigration:test_proposeCCTPMigration_AfterCancellation() (gas: 52523) +SiloedUSDCTokenPool_proposeCCTPMigration:test_proposeCCTPMigration_RevertWhen_ChainAlreadyMigrated() (gas: 362221) +SiloedUSDCTokenPool_proposeCCTPMigration:test_proposeCCTPMigration_RevertWhen_ExistingProposal() (gas: 41012) +SiloedUSDCTokenPool_proposeCCTPMigration:test_proposeCCTPMigration_RevertWhen_InvalidChainSelector() (gas: 11392) SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMintV2_Success() (gas: 100602) +SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_ChainNotSupported() (gas: 34597) +SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_InsufficientLiquidity_InsufficientExcludedTokens() (gas: 132099) +SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_InsufficientLiquidity_MigratedChainHasNoExcludedLiquidity() (gas: 358452) +SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_InsufficientLiquidity_ProposedChainHasNoExcludedLiquidity() (gas: 84473) +SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMint_RevertWhen_NotAllowedTokenPoolProxy() (gas: 40390) SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMint_SubtractsFromExcludedTokens() (gas: 308537) SiloedUSDCTokenPool_releaseOrMint:test_releaseOrMint_Success() (gas: 103342) SiloedUSDCTokenPool_typeAndVersion:test_typeAndVersion() (gas: 9936) +TokenAdminRegistry_acceptAdminRole:test_RevertWhen_acceptAdminRole_OnlyPendingAdministrator() (gas: 52834) TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole() (gas: 45424) +TokenAdminRegistry_addRegistryModule:test_RevertWhen_addRegistryModule_OnlyOwner() (gas: 12938) TokenAdminRegistry_addRegistryModule:test_addRegistryModule() (gas: 67792) +TokenAdminRegistry_getAllConfiguredTokens:testFuzz_getAllConfiguredTokens_Success(uint8) (runs: 256, μ: 5482368, ~: 2023267) TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds() (gas: 11754) TokenAdminRegistry_getPool:test_getPool() (gas: 17951) TokenAdminRegistry_getPools:test_getPools() (gas: 40701) TokenAdminRegistry_isAdministrator:test_isAdministrator() (gas: 107880) +TokenAdminRegistry_proposeAdministrator:testFuzz_proposeAdministrator_Success(address[50],address[50]) (runs: 256, μ: 5596344, ~: 6010577) +TokenAdminRegistry_proposeAdministrator:test_RevertWhen_proposeAdministrator_AlreadyRegistered() (gas: 105744) +TokenAdminRegistry_proposeAdministrator:test_RevertWhen_proposeAdministrator_OnlyRegistryModule() (gas: 16344) +TokenAdminRegistry_proposeAdministrator:test_RevertWhen_proposeAdministrator_ZeroAddress() (gas: 15866) TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module() (gas: 114714) TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner() (gas: 109226) TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed() (gas: 117826) +TokenAdminRegistry_removeRegistryModule:test_RevertWhen_removeRegistryModule_OnlyOwner() (gas: 12850) TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule() (gas: 55228) +TokenAdminRegistry_setPool:test_RevertWhen_setPool_InvalidTokenPoolToken() (gas: 19766) +TokenAdminRegistry_setPool:test_RevertWhen_setPool_OnlyAdministrator() (gas: 18423) TokenAdminRegistry_setPool:test_setPool() (gas: 36792) TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool() (gas: 31885) +TokenAdminRegistry_transferAdminRole:test_RevertWhen_transferAdminRole_OnlyAdministrator() (gas: 18753) TokenAdminRegistry_transferAdminRole:test_transferAdminRole() (gas: 50684) +TokenPoolFactory_constructor:test_constructor_RevertWhen_InvalidZeroAddress() (gas: 2504498) TokenPoolFactory_constructor:test_constructor_getStaticConfig() (gas: 19061) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_BurnFromMintTokenPool() (gas: 6794475) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_FactoryHasNoPermissionsAfterDeployment() (gas: 5894212) @@ -623,6 +1192,8 @@ TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_FutureOwne TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_LockRelease_AuthorizesPoolForLockBox() (gas: 7315966) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_RemoteDeploymentViaFutureOwner() (gas: 6224278) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_RemoteTokenHasDifferentDecimals() (gas: 16253114) +TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_RevertWhen_EmptyRemotePoolInitCode() (gas: 2212253) +TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_RevertWhen_EmptyRemoteTokenInitCode() (gas: 2278017) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_WithNoExistingRemoteContracts_Predict() (gas: 16471443) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_WithNoExistingTokenOnRemoteChain() (gas: 6550652) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenAndTokenPool_WithRemoteTokenAndRemotePool() (gas: 6792484) @@ -630,16 +1201,37 @@ TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenPoolWithExistingToken_E TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenPoolWithExistingToken_FactoryHasNoPermissionsAfterDeployment() (gas: 5648498) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenPoolWithExistingToken_LockRelease_ExistingToken_Predict() (gas: 17633507) TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenPoolWithExistingToken_LockRelease_UserLockBoxOwnershipPreserved() (gas: 6389825) +TokenPoolFactory_deployTokenAndTokenPool:test_deployTokenPoolWithExistingToken_RevertWhen_InvalidLockBoxToken() (gas: 3759588) TokenPoolWithAllowList_setDynamicConfig:test_setDynamicConfig() (gas: 72631) +TokenPoolWithAllowList_setDynamicConfig:test_setDynamicConfig_RevertWhen_ZeroAddressInvalid() (gas: 11644) +TokenPool_addRemotePool:test_RevertWhen_NonExistentChain() (gas: 14864) +TokenPool_addRemotePool:test_RevertWhen_PoolAlreadyAdded() (gas: 118130) +TokenPool_addRemotePool:test_RevertWhen_ZeroLengthAddressNotAllowed() (gas: 14512) TokenPool_addRemotePool:test_addRemotePool() (gas: 158486) TokenPool_addRemotePool:test_addRemotePool_MultipleActive() (gas: 498008) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_InvalidRateLimitRate() (gas: 584243) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_NonExistentChain() (gas: 15769) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_OnlyCallableByOwner() (gas: 12615) +TokenPool_applyChainUpdates:test_RevertWhen_applyChainUpdates_ZeroAddressNotAllowed() (gas: 227716) TokenPool_applyChainUpdates:test_applyChainUpdates() (gas: 688137) TokenPool_applyChainUpdates:test_applyChainUpdates_UpdatesRemotePoolHashes() (gas: 1098764) TokenPool_applyFee:test_applyFee_CustomFinality() (gas: 65407) TokenPool_applyFee:test_applyFee_DefaultFinality() (gas: 58129) TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates() (gas: 48495) TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_DeleteConfig() (gas: 36393) +TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_InvalidTokenTransferFeeConfig_EnabledWithZeroGasOverhead() (gas: 17433) +TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_InvalidTokenTransferFeeConfig_IsEnabledFalse() (gas: 16883) +TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_InvalidTransferFeeBps_CustomBpsTooHigh() (gas: 17272) +TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_InvalidTransferFeeBps_DefaultBpsTooHigh() (gas: 16961) +TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_NonExistentChain() (gas: 16807) +TokenPool_applyTokenTransferFeeConfigUpdates:test_applyTokenTransferFeeConfigUpdates_RevertWhen_OnlyCallableByOwner() (gas: 13248) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_HighAmountOverflows() (gas: 4237659) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_HighLocalDecimalsOverflows() (gas: 4237208) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_HighRemoteDecimalsOverflows() (gas: 10491) +TokenPool_calculateLocalAmount:test_RevertWhen_calculateLocalAmountWhen_LowRemoteDecimalsOverflows() (gas: 4237043) TokenPool_calculateLocalAmount:test_calculateLocalAmount() (gas: 121865) +TokenPool_constructor:test_RevertWhen_constructorWhen_InvalidDecimalArgs() (gas: 79020) +TokenPool_constructor:test_RevertWhen_constructorWhen_ZeroAddressNotAllowed() (gas: 72883) TokenPool_constructor:test_constructor() (gas: 30058) TokenPool_constructor:test_constructor_DecimalCallFails() (gas: 4234535) TokenPool_getFee:test_getFee_CustomFinality() (gas: 60437) @@ -647,6 +1239,8 @@ TokenPool_getFee:test_getFee_DefaultFinality() (gas: 54197) TokenPool_getFee:test_getFee_DisabledConfig_CustomFinality_ReturnsZeros() (gas: 49481) TokenPool_getFee:test_getFee_DisabledConfig_ReturnsZeros() (gas: 43991) TokenPool_getFee:test_getFee_NoConfig() (gas: 18625) +TokenPool_getFee:test_getFee_RevertWhen_FtfNotAllowedByPool() (gas: 14976) +TokenPool_getFee:test_getFee_RevertWhen_RequestedDepthBelowMinimum() (gas: 58372) TokenPool_getRemotePool:test_getRemotePools() (gas: 332629) TokenPool_getRequiredCCVs:test_getRequiredCCVs_Inbound_ConvertsSourceDecimalsToLocal_AboveThreshold() (gas: 210648) TokenPool_getRequiredCCVs:test_getRequiredCCVs_Inbound_EmptySourcePoolData_FallsBackToLocalDecimals() (gas: 159628) @@ -654,19 +1248,36 @@ TokenPool_getRequiredCCVs:test_getRequiredCCVs_WithDefaultFinality_AppliesDefaul TokenPool_getRequiredCCVs:test_getRequiredCCVs_WithFastFinality_AppliesCustomFeeBps() (gas: 32576) TokenPool_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig() (gas: 53783) TokenPool_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_DeleteConfig() (gas: 26782) +TokenPool_onlyOffRamp:test_RevertWhen_CallerIsNotARampOnRouter() (gas: 22239) +TokenPool_onlyOffRamp:test_RevertWhen_ChainNotAllowed() (gas: 237214) TokenPool_onlyOffRamp:test_onlyOffRamp() (gas: 78183) +TokenPool_onlyOnRamp:test_RevertWhen_CallerIsNotARampOnRouter() (gas: 21959) +TokenPool_onlyOnRamp:test_RevertWhen_ChainNotAllowed() (gas: 214764) TokenPool_onlyOnRamp:test_onlyOnRamp() (gas: 33130) +TokenPool_parseRemoteDecimals:test_RevertWhen_parseRemoteDecimalsWhen_InvalidRemoteChainDecimals_DigitTooLarge() (gas: 10851) +TokenPool_parseRemoteDecimals:test_RevertWhen_parseRemoteDecimalsWhen_InvalidRemoteChainDecimals_WrongType() (gas: 11788) TokenPool_parseRemoteDecimals:test_parseRemoteDecimals() (gas: 14815) TokenPool_parseRemoteDecimals:test_parseRemoteDecimals_NoDecimalsDefaultsToLocalDecimals() (gas: 9985) +TokenPool_removeRemotePool:test_RevertWhen_InvalidRemotePoolForChain() (gas: 18180) +TokenPool_removeRemotePool:test_RevertWhen_NonExistentChain() (gas: 14974) TokenPool_removeRemotePool:test_removeRemotePool() (gas: 192073) TokenPool_setAllowedFinalityConfig:test_setAllowedFinalityConfig() (gas: 20887) +TokenPool_setAllowedFinalityConfig:test_setAllowedFinalityConfig_RevertWhen_OnlyCallableByOwner() (gas: 16153) +TokenPool_setChainRateLimiterConfigs:testFuzz_setRateLimitConfig(uint128,uint128,uint32,bool) (runs: 256, μ: 95187, ~: 63795) +TokenPool_setChainRateLimiterConfigs:test_setRateLimitConfig_RevertWhen_InvalidRateLimitRate_Outbound() (gas: 19753) +TokenPool_setChainRateLimiterConfigs:test_setRateLimitConfig_RevertWhen_NonExistentChain() (gas: 18514) +TokenPool_setChainRateLimiterConfigs:test_setRateLimitConfig_RevertWhen_Unauthorized_OnlyOwnerOrRateLimitAdmin() (gas: 16780) TokenPool_setChainRateLimiterConfigs:test_setRateLimitConfig_customFinality() (gas: 125079) +TokenPool_setRateLimitAdmin:test_RevertWhen_SetRateLimitAdmin() (gas: 14048) TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin() (gas: 49828) TokenPool_supportsInterface:test_supportsInterface() (gas: 13110) TokenPool_updateAdvancedPoolHooks:test_updateAdvancedPoolHooks() (gas: 22125) TokenPool_updateAdvancedPoolHooks:test_updateAdvancedPoolHooks_OnlyCallableByOwner() (gas: 15910) TokenPool_validateLockOrBurn:test_validateLockOrBurn() (gas: 64362) TokenPool_validateLockOrBurn:test_validateLockOrBurn_ConsumesRateLimitAfterFee() (gas: 108768) +TokenPool_validateLockOrBurn:test_validateLockOrBurn_RevertWhen_FtfNotAllowedByPool() (gas: 42427) +TokenPool_validateLockOrBurn:test_validateLockOrBurn_RevertWhen_InvalidToken() (gas: 22623) +TokenPool_validateLockOrBurn:test_validateLockOrBurn_RevertWhen_RequestedDepthBelowMinimum() (gas: 44968) TokenPool_validateLockOrBurn:test_validateLockOrBurn_WithFastFinality() (gas: 172807) TokenPool_validateLockOrBurn:test_validateLockOrBurn_WithFastFinality_ConsumesAfterFee() (gas: 213331) TokenPool_validateLockOrBurn:test_validateLockOrBurn_WithFastFinality_FallsBackToDefaultBucket() (gas: 74588) @@ -688,38 +1299,86 @@ USDCTokenPoolProxy__getPoolForMechanism:test_getPoolForMechanism_CCTPV1() (gas: USDCTokenPoolProxy__getPoolForMechanism:test_getPoolForMechanism_CCTPV2() (gas: 43848) USDCTokenPoolProxy__getPoolForMechanism:test_getPoolForMechanism_CCV() (gas: 18396) USDCTokenPoolProxy__getPoolForMechanism:test_getPoolForMechanism_LockRelease() (gas: 100524) +USDCTokenPoolProxy__getPoolForMechanism:test_getPoolForMechanism_RevertWhen_InvalidLockOrBurnMechanism() (gas: 11812) +USDCTokenPoolProxy__getPoolForMechanism:test_getPoolForMechanism_RevertWhen_MustSetPoolForMechanism_CCTPV1() (gas: 88511) +USDCTokenPoolProxy__getPoolForMechanism:test_getPoolForMechanism_RevertWhen_MustSetPoolForMechanism_CCV() (gas: 40524) USDCTokenPoolProxy_constructor:test_constructor() (gas: 2663678) +USDCTokenPoolProxy_constructor:test_constructor_RevertWhen_CCTPVerifierAddressIsZero() (gas: 73068) +USDCTokenPoolProxy_constructor:test_constructor_RevertWhen_RouterAddressIsZero() (gas: 72844) +USDCTokenPoolProxy_constructor:test_constructor_RevertWhen_TokenAddressIsZero() (gas: 72727) USDCTokenPoolProxy_getFee:test_getFee() (gas: 22110) +USDCTokenPoolProxy_getFee:test_getFee_RevertWhen_InvalidLockOrBurnMechanism_NoMechanismSet() (gas: 12765) +USDCTokenPoolProxy_getFee:test_getFee_RevertWhen_InvalidLockOrBurnMechanism_OldMechanism() (gas: 45465) +USDCTokenPoolProxy_getFee:test_getFee_RevertWhen_MustSetPoolForMechanism() (gas: 40362) USDCTokenPoolProxy_getFee:test_getFee_SiloedPool() (gas: 106981) USDCTokenPoolProxy_getRemotePools:test_getRemotePools() (gas: 26037) +USDCTokenPoolProxy_getRemotePools:test_getRemotePools_RevertWhen_MustSetPoolForMechanism() (gas: 41331) USDCTokenPoolProxy_getRemoteToken:test_getRemoteToken() (gas: 20142) +USDCTokenPoolProxy_getRemoteToken:test_getRemoteToken_RevertWhen_MustSetPoolForMechanism() (gas: 41560) USDCTokenPoolProxy_getRequiredCCVs:test_getRequiredCCVs_CCTPCCVRequired() (gas: 15501) USDCTokenPoolProxy_getRequiredCCVs:test_getRequiredCCVs_DefaultCCVsRequired() (gas: 45255) USDCTokenPoolProxy_getRequiredCCVs:test_getRequiredCCVs_Inbound_MsgTagOverridesConfig_CCVTagWithV2Config() (gas: 30877) USDCTokenPoolProxy_getRequiredCCVs:test_getRequiredCCVs_Inbound_MsgTagOverridesConfig_LRTagWithCCVConfig() (gas: 16021) +USDCTokenPoolProxy_getRequiredCCVs:test_getRequiredCCVs_RevertWhen_NoLockOrBurnMechanismSet() (gas: 14584) USDCTokenPoolProxy_getToken:test_getToken() (gas: 10824) USDCTokenPoolProxy_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_CCTPV1_ReturnsEmptyConfig() (gas: 46212) USDCTokenPoolProxy_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_CCTPV2_ReturnsEmptyConfig() (gas: 46075) USDCTokenPoolProxy_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_CCV() (gas: 24527) USDCTokenPoolProxy_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_LockRelease() (gas: 108952) +USDCTokenPoolProxy_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_RevertWhen_InvalidLockOrBurnMechanism_InvalidMechanism() (gas: 14354) +USDCTokenPoolProxy_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_RevertWhen_MustSetPoolForMechanism_CCV() (gas: 42060) +USDCTokenPoolProxy_getTokenTransferFeeConfig:test_getTokenTransferFeeConfig_RevertWhen_MustSetPoolForMechanism_LockRelease() (gas: 94284) USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_CCTPV1() (gas: 100308) USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_CCTPV2() (gas: 92089) USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_CCTPV2WithCCV() (gas: 107076) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_CCTPV2WithCCV_RevertWhen_ChainNotSupportedByVerifier() (gas: 43745) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_CCTPV2WithCCV_RevertWhen_NoLockOrBurnMechanismSet() (gas: 65267) USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_LockRelease() (gas: 102288) USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_LockReleaseV2() (gas: 107450) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_RevertWhen_InvalidLockOrBurnMechanism() (gas: 34088) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_RevertWhen_MustSetPoolForMechanism() (gas: 49104) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_RevertWhen_NoLockOrBurnMechanismSet_PoolRemovedAfterMechanismConfigured() (gas: 65771) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_RevertWhen_Unauthorized() (gas: 30419) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_V2_RevertWhen_InvalidMechanism() (gas: 29992) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_V2_RevertWhen_LockReleasePoolNotSet() (gas: 93158) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_V2_RevertWhen_Unauthorized() (gas: 30936) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_V2_RevertWhen_UnsupportedMechanism_CCTPV1() (gas: 34073) +USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_V2_RevertWhen_UnsupportedMechanism_CCTPV2() (gas: 34244) USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_CCTPV2Flag() (gas: 46239) USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_CCTPV2_CCVFlag() (gas: 46106) USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_InvalidVersion() (gas: 33313) USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_LegacyFormat_MessageTransmitterProxySupported() (gas: 72716) USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_LockReleaseFlag() (gas: 93447) +USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_RevertWhen_CallerIsNotARampOnRouter() (gas: 31720) +USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_RevertWhen_SourcePoolDataTooShort() (gas: 33028) +USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_V2_RevertWhen_CallerIsNotARampOnRouter() (gas: 32249) +USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_V2_RevertWhen_InvalidMessageVersion() (gas: 33488) +USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_V2_RevertWhen_SourcePoolDataTooShort() (gas: 32753) USDCTokenPoolProxy_setFeeAggregator:test_setFeeAggregator() (gas: 36067) +USDCTokenPoolProxy_setFeeAggregator:test_setFeeAggregator_RevertWhen_CallerIsNotOwner() (gas: 14437) USDCTokenPoolProxy_updateLockOrBurnMechanisms:test_updateLockOrBurnMechanisms() (gas: 105745) +USDCTokenPoolProxy_updateLockOrBurnMechanisms:test_updateLockOrBurnMechanisms_RevertWhen_MismatchedArrayLengths() (gas: 13279) +USDCTokenPoolProxy_updateLockOrBurnMechanisms:test_updateLockOrBurnMechanisms_RevertWhen_MustSetPoolForMechanism_CCTPV1PoolNotSet() (gas: 60575) +USDCTokenPoolProxy_updateLockOrBurnMechanisms:test_updateLockOrBurnMechanisms_RevertWhen_MustSetPoolForMechanism_CCTPV2PoolNotSet() (gas: 60481) +USDCTokenPoolProxy_updateLockOrBurnMechanisms:test_updateLockOrBurnMechanisms_RevertWhen_MustSetPoolForMechanism_CCVPoolNotSet() (gas: 60839) USDCTokenPoolProxy_updatePoolAddresses:test_updatePoolAddresses() (gas: 57436) +USDCTokenPoolProxy_updatePoolAddresses:test_updatePoolAddresses_RevertWhen_PoolAddressCannotBeSelf() (gas: 14848) +USDCTokenPoolProxy_updatePoolAddresses:test_updatePoolAddresses_RevertWhen_TokenPoolUnsupported_CCTPV1PoolDoesNotSupportIPoolV1() (gas: 39504) +USDCTokenPoolProxy_updatePoolAddresses:test_updatePoolAddresses_RevertWhen_TokenPoolUnsupported_CCTPV2PoolDoesNotSupportIPoolV1() (gas: 39657) +USDCTokenPoolProxy_updatePoolAddresses:test_updatePoolAddresses_RevertWhen_TokenPoolUnsupported_CCTPV2PoolWithCCVDoesNotSupportIPoolV2() (gas: 37027) +USDCTokenPoolProxy_updatePoolAddresses:test_updatePoolAddresses_RevertWhen_TokenPoolUnsupported_SiloedLockReleasePoolDoesNotSupportIPoolV1OrV2() (gas: 55775) USDCTokenPoolProxy_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 431624) USDCTokenPoolProxy_withdrawFeeTokens:test_withdrawFeeTokens_CalledByNonOwner() (gas: 234057) +USDCTokenPoolProxy_withdrawFeeTokens:test_withdrawFeeTokens_RevertWhen_FeeAggregatorNotSet() (gas: 185024) VersionedVerifierResolver_applyInboundImplementationUpdates:test_applyInboundImplementationUpdates() (gas: 109632) +VersionedVerifierResolver_applyInboundImplementationUpdates:test_applyInboundImplementationUpdates_RevertWhen_InvalidVersion() (gas: 14685) +VersionedVerifierResolver_applyInboundImplementationUpdates:test_applyInboundImplementationUpdates_RevertWhen_OnlyCallableByOwner() (gas: 11620) VersionedVerifierResolver_applyOutboundImplementationUpdates:test_applyOutboundImplementationUpdates() (gas: 108468) +VersionedVerifierResolver_applyOutboundImplementationUpdates:test_applyOutboundImplementationUpdates_RevertWhen_InvalidDestChainSelector() (gas: 14422) +VersionedVerifierResolver_applyOutboundImplementationUpdates:test_applyOutboundImplementationUpdates_RevertWhen_OnlyCallableByOwner() (gas: 11447) +VersionedVerifierResolver_getInboundImplementation:test_getInboundImplementation_RevertWhen_InvalidVerifierResultsLength() (gas: 8740) VersionedVerifierResolver_setFeeAggregator:test_setFeeAggregator() (gas: 37286) +VersionedVerifierResolver_setFeeAggregator:test_setFeeAggregator_RevertWhen_OnlyCallableByOwner() (gas: 12657) VersionedVerifierResolver_withdrawFeeTokens:test_withdrawFeeTokens() (gas: 216400) VersionedVerifierResolver_withdrawFeeTokens:test_withdrawFeeTokens_MultipleTokens() (gas: 1773230) cctp_e2e:test_cctp_e2e() (gas: 658482) diff --git a/chains/evm/contracts/ccvs/components/BaseVerifier.sol b/chains/evm/contracts/ccvs/components/BaseVerifier.sol index 98652af66c..9e3fd36d57 100644 --- a/chains/evm/contracts/ccvs/components/BaseVerifier.sol +++ b/chains/evm/contracts/ccvs/components/BaseVerifier.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.24; import {ICrossChainVerifierV1} from "../../interfaces/ICrossChainVerifierV1.sol"; -import {IRMNRemote} from "../../interfaces/IRMNRemote.sol"; +import {IRMN} from "../../interfaces/IRMN.sol"; import {IRouter} from "../../interfaces/IRouter.sol"; import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; @@ -60,7 +60,7 @@ abstract contract BaseVerifier is ICrossChainVerifierV1, ITypeAndVersion { } /// @dev The rmn contract. - IRMNRemote internal immutable i_rmn; + IRMN internal immutable i_rmn; /// @dev The version tag that this instance of the verifier supports. This could be used as a domain separator, but /// should never be the primary defense against signature replay attacks across different verifiers. The primary /// defense should be using non-overlapping signer sets for different verifiers, and the version tag should only be @@ -93,7 +93,7 @@ abstract contract BaseVerifier is ICrossChainVerifierV1, ITypeAndVersion { if (_versionTag == bytes4(0)) revert VersionTagCannotBeZero(); i_versionTag = _versionTag; - i_rmn = IRMNRemote(rmnAddress); + i_rmn = IRMN(rmnAddress); } /// @notice Updates the storage locations. diff --git a/chains/evm/contracts/interfaces/IRMN.sol b/chains/evm/contracts/interfaces/IRMN.sol index 4bd8f8348f..8964f157c9 100644 --- a/chains/evm/contracts/interfaces/IRMN.sol +++ b/chains/evm/contracts/interfaces/IRMN.sol @@ -3,22 +3,17 @@ pragma solidity ^0.8.0; /// @notice This interface contains the only RMN-related functions that might be used on-chain by other CCIP contracts. interface IRMN { - /// @notice A Merkle root tagged with the address of the commit store contract it is destined for. - struct TaggedRoot { - address commitStore; - bytes32 root; - } - - /// @notice Callers MUST NOT cache the return value as a blessed tagged root could become unblessed. - function isBlessed( - TaggedRoot calldata taggedRoot - ) external view returns (bool); + /// @notice gets the current set of cursed subjects. + /// @return subjects the list of cursed subjects. + function getCursedSubjects() external view returns (bytes16[] memory subjects); /// @notice Iff there is an active global or legacy curse, this function returns true. + /// @return bool true if there is an active global curse. function isCursed() external view returns (bool); /// @notice Iff there is an active global curse, or an active curse for `subject`, this function returns true. /// @param subject To check whether a particular chain is cursed, set to bytes16(uint128(chainSelector)). + /// @return bool true if the provided subject is cursed *or* if there is an active global curse. function isCursed( bytes16 subject ) external view returns (bool); diff --git a/chains/evm/contracts/interfaces/IRMNRemote.sol b/chains/evm/contracts/interfaces/IRMNRemote.sol deleted file mode 100644 index 37573f2d98..0000000000 --- a/chains/evm/contracts/interfaces/IRMNRemote.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.4; - -import {Internal} from "../libraries/Internal.sol"; - -/// @notice This interface contains the only RMN-related functions that might be used on-chain by other CCIP contracts. -interface IRMNRemote { - /// @notice signature components from RMN nodes. - struct Signature { - bytes32 r; - bytes32 s; - } - - /// @notice Verifies signatures of RMN nodes, on dest lane updates as provided in the CommitReport. - /// @param offRampAddress is not inferred by msg.sender, in case the call is made through RMNProxy. - /// @param merkleRoots must be well formed, and is a representation of the CommitReport received from the oracles. - /// @param signatures rmnNodes ECDSA sigs, only r & s, must be sorted in ascending order by signer address. - /// @dev Will revert if verification fails. - function verify( - address offRampAddress, - Internal.MerkleRoot[] memory merkleRoots, - Signature[] memory signatures - ) external view; - - /// @notice gets the current set of cursed subjects. - /// @return subjects the list of cursed subjects. - function getCursedSubjects() external view returns (bytes16[] memory subjects); - - /// @notice If there is an active global or legacy curse, this function returns true. - /// @return bool true if there is an active global curse. - function isCursed() external view returns (bool); - - /// @notice If there is an active global curse, or an active curse for `subject`, this function returns true. - /// @param subject To check whether a particular chain is cursed, set to bytes16(uint128(chainSelector)). - /// @return bool true if the provided subject is cured *or* if there is an active global curse. - function isCursed( - bytes16 subject - ) external view returns (bool); -} diff --git a/chains/evm/contracts/offRamp/OffRamp.sol b/chains/evm/contracts/offRamp/OffRamp.sol index 04a6894b80..059403ff6b 100644 --- a/chains/evm/contracts/offRamp/OffRamp.sol +++ b/chains/evm/contracts/offRamp/OffRamp.sol @@ -7,7 +7,7 @@ import {ICrossChainVerifierResolver} from "../interfaces/ICrossChainVerifierReso import {ICrossChainVerifierV1} from "../interfaces/ICrossChainVerifierV1.sol"; import {IPoolV1} from "../interfaces/IPool.sol"; import {IPoolV2} from "../interfaces/IPoolV2.sol"; -import {IRMNRemote} from "../interfaces/IRMNRemote.sol"; +import {IRMN} from "../interfaces/IRMN.sol"; import {IRouter} from "../interfaces/IRouter.sol"; import {ITokenAdminRegistry} from "../interfaces/ITokenAdminRegistry.sol"; import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; @@ -69,7 +69,7 @@ contract OffRamp is ITypeAndVersion, Ownable2StepMsgSender { struct StaticConfig { uint64 localChainSelector; // ──╮ Local chainSelector uint16 gasForCallExactCheck; // │ Gas for call exact check - IRMNRemote rmnRemote; // ───────╯ RMN Verification Contract + IRMN rmnRemote; // ───────╯ RMN Verification Contract address tokenAdminRegistry; // ───────╮ Token admin registry address uint32 maxGasBufferToUpdateState; // ─╯ Max Gas Buffer to Update State } @@ -102,7 +102,7 @@ contract OffRamp is ITypeAndVersion, Ownable2StepMsgSender { /// @dev ChainSelector of this chain. uint64 internal immutable i_chainSelector; /// @dev The RMN verification contract. - IRMNRemote internal immutable i_rmnRemote; + IRMN internal immutable i_rmnRemote; /// @dev The address of the token admin registry. address internal immutable i_tokenAdminRegistry; /// @dev The minimum amount of gas to perform the call with exact gas. diff --git a/chains/evm/contracts/onRamp/OnRamp.sol b/chains/evm/contracts/onRamp/OnRamp.sol index 0399593988..7a01620e57 100644 --- a/chains/evm/contracts/onRamp/OnRamp.sol +++ b/chains/evm/contracts/onRamp/OnRamp.sol @@ -8,7 +8,7 @@ import {IExecutor} from "../interfaces/IExecutor.sol"; import {IFeeQuoter} from "../interfaces/IFeeQuoter.sol"; import {IPoolV1} from "../interfaces/IPool.sol"; import {IPoolV2} from "../interfaces/IPoolV2.sol"; -import {IRMNRemote} from "../interfaces/IRMNRemote.sol"; +import {IRMN} from "../interfaces/IRMN.sol"; import {IRouter} from "../interfaces/IRouter.sol"; import {ITokenAdminRegistry} from "../interfaces/ITokenAdminRegistry.sol"; import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; @@ -78,7 +78,7 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, Ownable2StepMsgSender // solhint-disable-next-line gas-struct-packing struct StaticConfig { uint64 chainSelector; // ─────────╮ Local chain selector. - IRMNRemote rmnRemote; // │ RMN remote address. + IRMN rmnRemote; // │ RMN remote address. uint32 maxUSDCentsPerMessage; // ─╯ Maximum USD cent value per message. address tokenAdminRegistry; // Token admin registry address. } @@ -150,7 +150,7 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, Ownable2StepMsgSender /// @dev The chain ID of the source chain that this contract is deployed to. uint64 private immutable i_localChainSelector; /// @dev The rmn contract. - IRMNRemote private immutable i_rmnRemote; + IRMN private immutable i_rmnRemote; /// @dev The address of the token admin registry. address private immutable i_tokenAdminRegistry; /// @dev The maximum USD cent value per message. Used to reduce impact of potential misconfigurations. diff --git a/chains/evm/contracts/rmn/RMN.sol b/chains/evm/contracts/rmn/RMN.sol new file mode 100644 index 0000000000..c1be36533b --- /dev/null +++ b/chains/evm/contracts/rmn/RMN.sol @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {IRMN} from "../interfaces/IRMN.sol"; +import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; + +import {AuthorizedCallers} from "@chainlink/contracts/src/v0.8/shared/access/AuthorizedCallers.sol"; +import {EnumerableSet} from "@chainlink/contracts/src/v0.8/shared/enumerable/EnumerableSetWithBytes16.sol"; + +/// @dev An active curse on this subject will cause isCursed() and isCursed(bytes16) to return true. Use this subject +/// for issues affecting all of CCIP chains, or pertaining to the chain that this contract is deployed on, instead of +/// using the local chain selector as a subject. +bytes16 constant GLOBAL_CURSE_SUBJECT = 0x01000000000000000000000000000001; + +/// @notice This contract supports cursing and uncursing of chains. +contract RMN is AuthorizedCallers, ITypeAndVersion, IRMN { + using EnumerableSet for EnumerableSet.Bytes16Set; + + error AlreadyCursed(bytes16 subject); + error NotCursed(bytes16 subject); + + event Cursed(bytes16[] subjects); + event Uncursed(bytes16[] subjects); + + string public constant override typeAndVersion = "RMN 2.1.0"; + + EnumerableSet.Bytes16Set private s_cursedSubjects; + + /// @param curseAdmins initial set of addresses authorized to call curse. + constructor( + address[] memory curseAdmins + ) AuthorizedCallers(curseAdmins) {} + + // ================================================================ + // │ Cursing │ + // ================================================================ + + /// @notice Curse a single subject. + /// @param subject The subject to curse. + function curse( + bytes16 subject + ) external { + bytes16[] memory subjects = new bytes16[](1); + subjects[0] = subject; + curse(subjects); + } + + /// @notice Curse an array of subjects. + /// @param subjects the subjects to curse. + /// @dev reverts if any of the subjects are already cursed or if there is a duplicate. + function curse( + bytes16[] memory subjects + ) public { + // Allow both the owner and authorized callers to curse subjects. + // Skip validation for the owner; validate authorization for others. + if (msg.sender != owner()) { + _validateCaller(); + } + for (uint256 i = 0; i < subjects.length; ++i) { + if (!s_cursedSubjects.add(subjects[i])) { + revert AlreadyCursed(subjects[i]); + } + } + emit Cursed(subjects); + } + + /// @notice Uncurse a single subject. + /// @param subject the subject to uncurse. + function uncurse( + bytes16 subject + ) external { + bytes16[] memory subjects = new bytes16[](1); + subjects[0] = subject; + uncurse(subjects); + } + + /// @notice Uncurse an array of subjects. + /// @param subjects the subjects to uncurse. + /// @dev reverts if any of the subjects are not cursed or if there is a duplicate. + function uncurse( + bytes16[] memory subjects + ) public onlyOwner { + for (uint256 i = 0; i < subjects.length; ++i) { + if (!s_cursedSubjects.remove(subjects[i])) { + revert NotCursed(subjects[i]); + } + } + emit Uncursed(subjects); + } + + /// @inheritdoc IRMN + function getCursedSubjects() external view returns (bytes16[] memory subjects) { + return s_cursedSubjects.values(); + } + + /// @inheritdoc IRMN + function isCursed() external view override returns (bool) { + // There are zero curses under normal circumstances, which means it's cheaper to check for the absence of curses. + // than to check the subject list for the global curse subject. + if (s_cursedSubjects.length() == 0) { + return false; + } + return s_cursedSubjects.contains(GLOBAL_CURSE_SUBJECT); + } + + /// @inheritdoc IRMN + function isCursed( + bytes16 subject + ) external view override returns (bool) { + // There are zero curses under normal circumstances, which means it's cheaper to check for the absence of curses. + // than to check the subject list twice, as we have to check for both the given and global curse subjects. + if (s_cursedSubjects.length() == 0) { + return false; + } + return s_cursedSubjects.contains(subject) || s_cursedSubjects.contains(GLOBAL_CURSE_SUBJECT); + } +} diff --git a/chains/evm/contracts/rmn/RMNRemote.sol b/chains/evm/contracts/rmn/RMNRemote.sol deleted file mode 100644 index 6dc8a5701b..0000000000 --- a/chains/evm/contracts/rmn/RMNRemote.sol +++ /dev/null @@ -1,291 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {IRMN} from "../interfaces/IRMN.sol"; -import {IRMNRemote} from "../interfaces/IRMNRemote.sol"; -import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; - -import {Internal} from "../libraries/Internal.sol"; -import {Ownable2StepMsgSender} from "@chainlink/contracts/src/v0.8/shared/access/Ownable2StepMsgSender.sol"; -import {EnumerableSet} from "@chainlink/contracts/src/v0.8/shared/enumerable/EnumerableSetWithBytes16.sol"; - -/// @dev An active curse on this subject will cause isCursed() and isCursed(bytes16) to return true. Use this subject -/// for issues affecting all of CCIP chains, or pertaining to the chain that this contract is deployed on, instead of -/// using the local chain selector as a subject. -bytes16 constant GLOBAL_CURSE_SUBJECT = 0x01000000000000000000000000000001; - -/// @notice This contract supports verification of RMN reports for any Any2EVM OffRamp. -/// @dev This contract implements both the new IRMNRemote interface and the legacy IRMN interface. This is to allow for -/// a seamless migration from the legacy RMN contract to this one. The only function that has been dropped in the newer -/// interface is `isBlessed`. For the `isBlessed` function, this contract relays the call to the legacy RMN contract. -contract RMNRemote is Ownable2StepMsgSender, ITypeAndVersion, IRMNRemote, IRMN { - using EnumerableSet for EnumerableSet.Bytes16Set; - - error AlreadyCursed(bytes16 subject); - error ConfigNotSet(); - error DuplicateOnchainPublicKey(); - error InvalidSignature(); - error InvalidSignerOrder(); - error NotEnoughSigners(); - error NotCursed(bytes16 subject); - error OutOfOrderSignatures(); - error ThresholdNotMet(); - error UnexpectedSigner(); - error ZeroValueNotAllowed(); - error IsBlessedNotAvailable(); - - event ConfigSet(uint32 indexed version, Config config); - event Cursed(bytes16[] subjects); - event Uncursed(bytes16[] subjects); - - /// @dev the configuration of an RMN signer. - struct Signer { - address onchainPublicKey; // ─╮ For signing reports. - uint64 nodeIndex; // ─────────╯ Maps to nodes in home chain config, should be strictly increasing. - } - - /// @dev the contract config. - struct Config { - bytes32 rmnHomeContractConfigDigest; // Digest of the RMNHome contract config. - Signer[] signers; // List of signers. - uint64 fSign; // Max number of faulty RMN nodes; f+1 signers are required to verify a report, must configure 2f+1 signers in total. - } - - /// @dev part of the payload that RMN nodes sign: keccak256(abi.encode(RMN_V1_6_ANY2EVM_REPORT, report)). - /// @dev this struct is only ever abi-encoded and hashed; it is never stored. - struct Report { - uint256 destChainId; // To guard against chain selector misconfiguration. - uint64 destChainSelector; // ────────╮ The chain selector of the destination chain. - address rmnRemoteContractAddress; // ─╯ The address of this contract. - address offrampAddress; // The address of the offramp on the same chain as this contract. - bytes32 rmnHomeContractConfigDigest; // The digest of the RMNHome contract config. - Internal.MerkleRoot[] merkleRoots; // The dest lane updates. - } - - /// @dev this is included in the preimage of the digest that RMN nodes sign. - bytes32 private constant RMN_V1_6_ANY2EVM_REPORT = keccak256("RMN_V1_6_ANY2EVM_REPORT"); - - string public constant override typeAndVersion = "RMNRemote 1.6.0"; - uint64 internal immutable i_localChainSelector; - IRMN internal immutable i_legacyRMN; - - Config private s_config; - uint32 private s_configCount; - - /// @dev RMN nodes only generate sigs with v=27; making this constant allows us to save gas by not transmitting v. - /// @dev Any valid ECDSA sig (r, s, v) can be "flipped" into (r, s*, v*) without knowing the private key (where v=27 or 28 for secp256k1) - /// https://github.com/kadenzipfel/smart-contract-vulnerabilities/blob/master/vulnerabilities/signature-malleability.md. - uint8 private constant ECDSA_RECOVERY_V = 27; - - EnumerableSet.Bytes16Set private s_cursedSubjects; - mapping(address signer => bool exists) private s_signers; // for more gas efficient verify. - - /// @param localChainSelector the chain selector of the chain this contract is deployed to. - constructor( - uint64 localChainSelector, - IRMN legacyRMN - ) { - if (localChainSelector == 0) revert ZeroValueNotAllowed(); - i_localChainSelector = localChainSelector; - - i_legacyRMN = legacyRMN; - } - - // ================================================================ - // │ Verification │ - // ================================================================ - - /// @inheritdoc IRMNRemote - function verify( - address offRampAddress, - Internal.MerkleRoot[] calldata merkleRoots, - Signature[] calldata signatures - ) external view { - if (s_configCount == 0) { - revert ConfigNotSet(); - } - if (signatures.length < s_config.fSign + 1) revert ThresholdNotMet(); - - bytes32 digest = keccak256( - abi.encode( - RMN_V1_6_ANY2EVM_REPORT, - Report({ - destChainId: block.chainid, - destChainSelector: i_localChainSelector, - rmnRemoteContractAddress: address(this), - offrampAddress: offRampAddress, - rmnHomeContractConfigDigest: s_config.rmnHomeContractConfigDigest, - merkleRoots: merkleRoots - }) - ) - ); - - address prevAddress; - address signerAddress; - for (uint256 i = 0; i < signatures.length; ++i) { - signerAddress = ecrecover(digest, ECDSA_RECOVERY_V, signatures[i].r, signatures[i].s); - if (signerAddress == address(0)) revert InvalidSignature(); - if (prevAddress >= signerAddress) revert OutOfOrderSignatures(); - if (!s_signers[signerAddress]) revert UnexpectedSigner(); - prevAddress = signerAddress; - } - } - - // ================================================================ - // │ Config │ - // ================================================================ - - /// @notice Sets the configuration of the contract. - /// @param newConfig the new configuration. - /// @dev setting config is atomic; we delete all pre-existing config and set everything from scratch. - function setConfig( - Config calldata newConfig - ) external onlyOwner { - if (newConfig.rmnHomeContractConfigDigest == bytes32(0)) { - revert ZeroValueNotAllowed(); - } - - // signers are in ascending order of nodeIndex. - for (uint256 i = 1; i < newConfig.signers.length; ++i) { - if (!(newConfig.signers[i - 1].nodeIndex < newConfig.signers[i].nodeIndex)) { - revert InvalidSignerOrder(); - } - } - - // min signers requirement is tenable. - if (newConfig.signers.length < 2 * newConfig.fSign + 1) { - revert NotEnoughSigners(); - } - - // clear the old signers. - for (uint256 i = s_config.signers.length; i > 0; --i) { - delete s_signers[s_config.signers[i - 1].onchainPublicKey]; - } - - // set the new signers. - for (uint256 i = 0; i < newConfig.signers.length; ++i) { - if (s_signers[newConfig.signers[i].onchainPublicKey]) { - revert DuplicateOnchainPublicKey(); - } - s_signers[newConfig.signers[i].onchainPublicKey] = true; - } - - s_config = newConfig; - uint32 newConfigCount = ++s_configCount; - emit ConfigSet(newConfigCount, newConfig); - } - - /// @notice Returns the current configuration of the contract and a version number. - /// @return version the current configs version. - /// @return config the current config. - function getVersionedConfig() external view returns (uint32 version, Config memory config) { - return (s_configCount, s_config); - } - - /// @notice Returns the chain selector configured at deployment time. - /// @return localChainSelector the chain selector, not the chain ID. - function getLocalChainSelector() external view returns (uint64 localChainSelector) { - return i_localChainSelector; - } - - /// @notice Returns the 32 byte header used in computing the report digest. - /// @return digestHeader the digest header. - function getReportDigestHeader() external pure returns (bytes32 digestHeader) { - return RMN_V1_6_ANY2EVM_REPORT; - } - - // ================================================================ - // │ Cursing │ - // ================================================================ - - /// @notice Curse a single subject. - /// @param subject the subject to curse. - function curse( - bytes16 subject - ) external { - bytes16[] memory subjects = new bytes16[](1); - subjects[0] = subject; - curse(subjects); - } - - /// @notice Curse an array of subjects. - /// @param subjects the subjects to curse. - /// @dev reverts if any of the subjects are already cursed or if there is a duplicate. - function curse( - bytes16[] memory subjects - ) public onlyOwner { - for (uint256 i = 0; i < subjects.length; ++i) { - if (!s_cursedSubjects.add(subjects[i])) { - revert AlreadyCursed(subjects[i]); - } - } - emit Cursed(subjects); - } - - /// @notice Uncurse a single subject. - /// @param subject the subject to uncurse. - function uncurse( - bytes16 subject - ) external { - bytes16[] memory subjects = new bytes16[](1); - subjects[0] = subject; - uncurse(subjects); - } - - /// @notice Uncurse an array of subjects. - /// @param subjects the subjects to uncurse. - /// @dev reverts if any of the subjects are not cursed or if there is a duplicate. - function uncurse( - bytes16[] memory subjects - ) public onlyOwner { - for (uint256 i = 0; i < subjects.length; ++i) { - if (!s_cursedSubjects.remove(subjects[i])) { - revert NotCursed(subjects[i]); - } - } - emit Uncursed(subjects); - } - - /// @inheritdoc IRMNRemote - function getCursedSubjects() external view returns (bytes16[] memory subjects) { - return s_cursedSubjects.values(); - } - - /// @inheritdoc IRMNRemote - function isCursed() external view override(IRMN, IRMNRemote) returns (bool) { - // There are zero curses under normal circumstances, which means it's cheaper to check for the absence of curses. - // than to check the subject list for the global curse subject. - if (s_cursedSubjects.length() == 0) { - return false; - } - return s_cursedSubjects.contains(GLOBAL_CURSE_SUBJECT); - } - - /// @inheritdoc IRMNRemote - function isCursed( - bytes16 subject - ) external view override(IRMN, IRMNRemote) returns (bool) { - // There are zero curses under normal circumstances, which means it's cheaper to check for the absence of curses. - // than to check the subject list twice, as we have to check for both the given and global curse subjects. - if (s_cursedSubjects.length() == 0) { - return false; - } - return s_cursedSubjects.contains(subject) || s_cursedSubjects.contains(GLOBAL_CURSE_SUBJECT); - } - - // ================================================================ - // │ Legacy pass through │ - // ================================================================ - - /// @inheritdoc IRMN - /// @dev This function is only expected to be used for messages from CCIP versions below 1.6. - function isBlessed( - TaggedRoot calldata taggedRoot - ) external view returns (bool) { - if (i_legacyRMN == IRMN(address(0))) { - revert IsBlessedNotAvailable(); - } - - return i_legacyRMN.isBlessed(taggedRoot); - } -} diff --git a/chains/evm/contracts/test/BaseTest.t.sol b/chains/evm/contracts/test/BaseTest.t.sol index b233a434f2..027b2b24b9 100644 --- a/chains/evm/contracts/test/BaseTest.t.sol +++ b/chains/evm/contracts/test/BaseTest.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.24; // Imports to any non-library are not allowed due to the significant cascading // compile time increase they cause when imported into this base test. -import {IRMNRemote} from "../interfaces/IRMNRemote.sol"; +import {IRMN} from "../interfaces/IRMN.sol"; import {Router} from "../Router.sol"; import {Internal} from "../libraries/Internal.sol"; @@ -31,7 +31,7 @@ contract BaseTest is Test { bool private s_baseTestInitialized; - IRMNRemote internal s_mockRMNRemote; + IRMN internal s_mockRMNRemote; Router internal s_sourceRouter; Router internal s_destRouter; @@ -47,9 +47,8 @@ contract BaseTest is Test { vm.label(STRANGER, "Stranger"); // setup RMNRemote - s_mockRMNRemote = IRMNRemote(makeAddr("MOCK RMN REMOTE")); + s_mockRMNRemote = IRMN(makeAddr("MOCK RMN REMOTE")); vm.etch(address(s_mockRMNRemote), bytes("fake bytecode")); - vm.mockCall(address(s_mockRMNRemote), abi.encodeWithSelector(IRMNRemote.verify.selector), bytes("")); vm.mockCall(address(s_mockRMNRemote), abi.encodeWithSignature("isCursed()"), abi.encode(false)); vm.mockCall(address(s_mockRMNRemote), abi.encodeWithSignature("isCursed(bytes16)"), abi.encode(false)); // no curses by defaule diff --git a/chains/evm/contracts/test/offRamp/OffRamp/OffRamp.constructor.t.sol b/chains/evm/contracts/test/offRamp/OffRamp/OffRamp.constructor.t.sol index b0163794bf..f63b4dfe95 100644 --- a/chains/evm/contracts/test/offRamp/OffRamp/OffRamp.constructor.t.sol +++ b/chains/evm/contracts/test/offRamp/OffRamp/OffRamp.constructor.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; -import {IRMNRemote} from "../../../interfaces/IRMNRemote.sol"; +import {IRMN} from "../../../interfaces/IRMN.sol"; import {OffRamp} from "../../../offRamp/OffRamp.sol"; import {BaseTest} from "../../BaseTest.t.sol"; @@ -32,7 +32,7 @@ contract OffRamp_constructor is BaseTest { OffRamp.StaticConfig memory config = OffRamp.StaticConfig({ localChainSelector: DEST_CHAIN_SELECTOR, gasForCallExactCheck: 5000, - rmnRemote: IRMNRemote(address(0)), + rmnRemote: IRMN(address(0)), tokenAdminRegistry: address(0x123), maxGasBufferToUpdateState: DEFAULT_MAX_GAS_BUFFER_TO_UPDATE_STATE }); diff --git a/chains/evm/contracts/test/onRamp/OnRamp/OnRamp.constructor.t.sol b/chains/evm/contracts/test/onRamp/OnRamp/OnRamp.constructor.t.sol index 08b65effc4..fa66fb7840 100644 --- a/chains/evm/contracts/test/onRamp/OnRamp/OnRamp.constructor.t.sol +++ b/chains/evm/contracts/test/onRamp/OnRamp/OnRamp.constructor.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; -import {IRMNRemote} from "../../../interfaces/IRMNRemote.sol"; +import {IRMN} from "../../../interfaces/IRMN.sol"; import {OnRamp} from "../../../onRamp/OnRamp.sol"; import {OnRampSetup} from "./OnRampSetup.t.sol"; @@ -49,7 +49,7 @@ contract OnRamp_constructor is OnRampSetup { // Zero rmnRemote. OnRamp.StaticConfig memory staticConfigZeroRMNRemote = OnRamp.StaticConfig({ chainSelector: SOURCE_CHAIN_SELECTOR, - rmnRemote: IRMNRemote(address(0)), + rmnRemote: IRMN(address(0)), maxUSDCentsPerMessage: MAX_USD_CENTS_PER_MESSAGE, tokenAdminRegistry: address(s_tokenAdminRegistry) }); diff --git a/chains/evm/contracts/test/rmn/RMNProxy/RMNProxy.isCursed.t.sol b/chains/evm/contracts/test/rmn/RMNProxy/RMNProxy.isCursed.t.sol index add370a3d6..364d8266ef 100644 --- a/chains/evm/contracts/test/rmn/RMNProxy/RMNProxy.isCursed.t.sol +++ b/chains/evm/contracts/test/rmn/RMNProxy/RMNProxy.isCursed.t.sol @@ -3,23 +3,23 @@ pragma solidity ^0.8.24; import {IRMN} from "../../../interfaces/IRMN.sol"; +import {GLOBAL_CURSE_SUBJECT, RMN} from "../../../rmn/RMN.sol"; import {RMNProxy} from "../../../rmn/RMNProxy.sol"; -import {GLOBAL_CURSE_SUBJECT, RMNRemote} from "../../../rmn/RMNRemote.sol"; import {RMNProxyTestSetup} from "./RMNProxyTestSetup.t.sol"; contract RMNProxy_isCursed is RMNProxyTestSetup { - RMNRemote internal s_mockRMNRemote; + RMN internal s_mockRmn; function setUp() public virtual override { super.setUp(); - s_mockRMNRemote = new RMNRemote(1, IRMN(address(0))); - s_rmnProxy = new RMNProxy(address(s_mockRMNRemote)); + s_mockRmn = new RMN(new address[](0)); + s_rmnProxy = new RMNProxy(address(s_mockRmn)); } function test_IsCursed_GlobalCurseSubject() public { assertFalse(IRMN(address(s_rmnProxy)).isCursed()); - s_mockRMNRemote.curse(GLOBAL_CURSE_SUBJECT); + s_mockRmn.curse(GLOBAL_CURSE_SUBJECT); vm.assertTrue(IRMN(address(s_rmnProxy)).isCursed()); } @@ -28,10 +28,10 @@ contract RMNProxy_isCursed is RMNProxyTestSetup { function test_isCursed_RevertWhen_isCursedReasonForwarded() public { bytes memory err = bytes("revert"); vm.mockCallRevert( - address(s_mockRMNRemote), abi.encodeWithSignature("isCursed()"), abi.encodeWithSelector(CustomError.selector, err) + address(s_mockRmn), abi.encodeWithSignature("isCursed()"), abi.encodeWithSelector(CustomError.selector, err) ); - s_rmnProxy.setARM(address(s_mockRMNRemote)); + s_rmnProxy.setARM(address(s_mockRmn)); vm.expectRevert(abi.encodeWithSelector(CustomError.selector, err)); IRMN(address(s_rmnProxy)).isCursed(); } diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMN.curse.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMN.curse.t.sol new file mode 100644 index 0000000000..90980d6f87 --- /dev/null +++ b/chains/evm/contracts/test/rmn/RMNRemote/RMN.curse.t.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {RMN} from "../../../rmn/RMN.sol"; +import {RMNRemoteSetup} from "./RMNSetup.t.sol"; +import {AuthorizedCallers} from "@chainlink/contracts/src/v0.8/shared/access/AuthorizedCallers.sol"; + +contract RMNRemote_curse is RMNRemoteSetup { + function test_curse() public { + vm.expectEmit(); + emit RMN.Cursed(s_curseSubjects); + + s_rmn.curse(s_curseSubjects); + + assertEq(abi.encode(s_rmn.getCursedSubjects()), abi.encode(s_curseSubjects)); + assertTrue(s_rmn.isCursed(CURSE_SUBJ_1)); + assertTrue(s_rmn.isCursed(CURSE_SUBJ_2)); + // Should not have cursed a random subject + assertFalse(s_rmn.isCursed(bytes16(keccak256("subject 3")))); + } + + function test_curse_ByOwner_WhenCurseAdminsExist() public { + address curseAdmin = makeAddr("curseAdmin"); + address[] memory adds = new address[](1); + adds[0] = curseAdmin; + s_rmn.applyAuthorizedCallerUpdates( + AuthorizedCallers.AuthorizedCallerArgs({addedCallers: adds, removedCallers: new address[](0)}) + ); + + vm.expectEmit(); + emit RMN.Cursed(s_curseSubjects); + s_rmn.curse(s_curseSubjects); + + assertTrue(s_rmn.isCursed(CURSE_SUBJ_1)); + assertTrue(s_rmn.isCursed(CURSE_SUBJ_2)); + } + + function test_curse_ByCurseAdmin() public { + address curseAdmin = makeAddr("curseAdmin"); + address[] memory adds = new address[](1); + adds[0] = curseAdmin; + s_rmn.applyAuthorizedCallerUpdates( + AuthorizedCallers.AuthorizedCallerArgs({addedCallers: adds, removedCallers: new address[](0)}) + ); + + vm.stopPrank(); + vm.prank(curseAdmin); + vm.expectEmit(); + emit RMN.Cursed(s_curseSubjects); + s_rmn.curse(s_curseSubjects); + + assertTrue(s_rmn.isCursed(CURSE_SUBJ_1)); + assertTrue(s_rmn.isCursed(CURSE_SUBJ_2)); + } + + function test_curse_ByNewlyAddedCurseAdmin() public { + address newAdmin = makeAddr("newAdmin"); + address[] memory adds = new address[](1); + adds[0] = newAdmin; + s_rmn.applyAuthorizedCallerUpdates( + AuthorizedCallers.AuthorizedCallerArgs({addedCallers: adds, removedCallers: new address[](0)}) + ); + + vm.stopPrank(); + vm.prank(newAdmin); + vm.expectEmit(); + emit RMN.Cursed(s_curseSubjects); + s_rmn.curse(s_curseSubjects); + + assertTrue(s_rmn.isCursed(CURSE_SUBJ_1)); + assertTrue(s_rmn.isCursed(CURSE_SUBJ_2)); + } + + function test_RevertWhen_curse_AlreadyCursed_duplicateSubject() public { + s_curseSubjects.push(CURSE_SUBJ_1); + + vm.expectRevert(abi.encodeWithSelector(RMN.AlreadyCursed.selector, CURSE_SUBJ_1)); + s_rmn.curse(s_curseSubjects); + } + + function test_RevertWhen_curse_calledByNonOwner() public { + vm.stopPrank(); + vm.prank(STRANGER); + vm.expectRevert(abi.encodeWithSelector(AuthorizedCallers.UnauthorizedCaller.selector, STRANGER)); + s_rmn.curse(s_curseSubjects); + } + + function test_RevertWhen_curse_calledByRemovedCurseAdmin() public { + address curseAdmin = makeAddr("curseAdmin"); + address[] memory adds = new address[](1); + adds[0] = curseAdmin; + s_rmn.applyAuthorizedCallerUpdates( + AuthorizedCallers.AuthorizedCallerArgs({addedCallers: adds, removedCallers: new address[](0)}) + ); + address[] memory toRemove = new address[](1); + toRemove[0] = curseAdmin; + s_rmn.applyAuthorizedCallerUpdates( + AuthorizedCallers.AuthorizedCallerArgs({addedCallers: new address[](0), removedCallers: toRemove}) + ); + + vm.stopPrank(); + vm.prank(curseAdmin); + vm.expectRevert(abi.encodeWithSelector(AuthorizedCallers.UnauthorizedCaller.selector, curseAdmin)); + s_rmn.curse(s_curseSubjects); + } +} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMN.globalCurses.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMN.globalCurses.t.sol new file mode 100644 index 0000000000..371a3a7a71 --- /dev/null +++ b/chains/evm/contracts/test/rmn/RMNRemote/RMN.globalCurses.t.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {GLOBAL_CURSE_SUBJECT} from "../../../rmn/RMN.sol"; +import {RMNRemoteSetup} from "./RMNSetup.t.sol"; + +contract RMNRemote_global_curses is RMNRemoteSetup { + function test_isCursed_globalCurseSubject() public { + bytes16 randSubject = bytes16(keccak256("random subject")); + assertFalse(s_rmn.isCursed()); + assertFalse(s_rmn.isCursed(randSubject)); + + s_rmn.curse(GLOBAL_CURSE_SUBJECT); + assertTrue(s_rmn.isCursed()); + assertTrue(s_rmn.isCursed(randSubject)); + + s_rmn.uncurse(GLOBAL_CURSE_SUBJECT); + assertFalse(s_rmn.isCursed()); + assertFalse(s_rmn.isCursed(randSubject)); + } +} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMN.uncurse.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMN.uncurse.t.sol new file mode 100644 index 0000000000..114db52a68 --- /dev/null +++ b/chains/evm/contracts/test/rmn/RMNRemote/RMN.uncurse.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {RMN} from "../../../rmn/RMN.sol"; +import {RMNRemoteSetup} from "./RMNSetup.t.sol"; +import {AuthorizedCallers} from "@chainlink/contracts/src/v0.8/shared/access/AuthorizedCallers.sol"; +import {Ownable2Step} from "@chainlink/contracts/src/v0.8/shared/access/Ownable2Step.sol"; + +contract RMNRemote_uncurse is RMNRemoteSetup { + function setUp() public override { + super.setUp(); + s_rmn.curse(s_curseSubjects); + } + + function test_uncurse() public { + vm.expectEmit(); + emit RMN.Uncursed(s_curseSubjects); + + s_rmn.uncurse(s_curseSubjects); + + assertEq(s_rmn.getCursedSubjects().length, 0); + assertFalse(s_rmn.isCursed(CURSE_SUBJ_1)); + assertFalse(s_rmn.isCursed(CURSE_SUBJ_2)); + } + + function test_RevertWhen_uncurse_NotCursed_duplicatedUncurseSubject() public { + s_curseSubjects.push(CURSE_SUBJ_1); + + vm.expectRevert(abi.encodeWithSelector(RMN.NotCursed.selector, CURSE_SUBJ_1)); + s_rmn.uncurse(s_curseSubjects); + } + + function test_RevertWhen_uncurse_calledByNonOwner() public { + vm.stopPrank(); + vm.prank(STRANGER); + vm.expectRevert(Ownable2Step.OnlyCallableByOwner.selector); + s_rmn.uncurse(s_curseSubjects); + } + + function test_RevertWhen_uncurse_calledByCurseAdmin() public { + address curseAdmin = makeAddr("curseAdmin"); + address[] memory adds = new address[](1); + adds[0] = curseAdmin; + s_rmn.applyAuthorizedCallerUpdates( + AuthorizedCallers.AuthorizedCallerArgs({addedCallers: adds, removedCallers: new address[](0)}) + ); + + vm.stopPrank(); + vm.prank(curseAdmin); + vm.expectRevert(Ownable2Step.OnlyCallableByOwner.selector); + s_rmn.uncurse(s_curseSubjects); + } +} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.constructor.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.constructor.t.sol deleted file mode 100644 index 8c2b015780..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.constructor.t.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; - -contract RMNRemote_constructor is RMNRemoteSetup { - function test_constructor() public view { - assertEq(s_rmnRemote.getLocalChainSelector(), 1); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.curse.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.curse.t.sol deleted file mode 100644 index 10569711de..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.curse.t.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {RMNRemote} from "../../../rmn/RMNRemote.sol"; -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; -import {Ownable2Step} from "@chainlink/contracts/src/v0.8/shared/access/Ownable2Step.sol"; - -contract RMNRemote_curse is RMNRemoteSetup { - function test_curse() public { - vm.expectEmit(); - emit RMNRemote.Cursed(s_curseSubjects); - - s_rmnRemote.curse(s_curseSubjects); - - assertEq(abi.encode(s_rmnRemote.getCursedSubjects()), abi.encode(s_curseSubjects)); - assertTrue(s_rmnRemote.isCursed(CURSE_SUBJ_1)); - assertTrue(s_rmnRemote.isCursed(CURSE_SUBJ_2)); - // Should not have cursed a random subject - assertFalse(s_rmnRemote.isCursed(bytes16(keccak256("subject 3")))); - } - - function test_RevertWhen_curse_AlreadyCursed_duplicateSubject() public { - s_curseSubjects.push(CURSE_SUBJ_1); - - vm.expectRevert(abi.encodeWithSelector(RMNRemote.AlreadyCursed.selector, CURSE_SUBJ_1)); - s_rmnRemote.curse(s_curseSubjects); - } - - function test_RevertWhen_curse_calledByNonOwner() public { - vm.expectRevert(Ownable2Step.OnlyCallableByOwner.selector); - vm.stopPrank(); - vm.prank(STRANGER); - s_rmnRemote.curse(s_curseSubjects); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.globalCurses.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.globalCurses.t.sol deleted file mode 100644 index 3732095ea9..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.globalCurses.t.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {GLOBAL_CURSE_SUBJECT} from "../../../rmn/RMNRemote.sol"; -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; - -contract RMNRemote_global_curses is RMNRemoteSetup { - function test_isCursed_globalCurseSubject() public { - bytes16 randSubject = bytes16(keccak256("random subject")); - assertFalse(s_rmnRemote.isCursed()); - assertFalse(s_rmnRemote.isCursed(randSubject)); - - s_rmnRemote.curse(GLOBAL_CURSE_SUBJECT); - assertTrue(s_rmnRemote.isCursed()); - assertTrue(s_rmnRemote.isCursed(randSubject)); - - s_rmnRemote.uncurse(GLOBAL_CURSE_SUBJECT); - assertFalse(s_rmnRemote.isCursed()); - assertFalse(s_rmnRemote.isCursed(randSubject)); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.isBlessed.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.isBlessed.t.sol deleted file mode 100644 index d013f9edf0..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.isBlessed.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {IRMN} from "../../../interfaces/IRMN.sol"; - -import {RMNRemote} from "../../../rmn/RMNRemote.sol"; -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; - -contract RMNRemote_isBlessed is RMNRemoteSetup { - function test_isBlessed() public { - IRMN.TaggedRoot memory taggedRoot = IRMN.TaggedRoot({root: keccak256("root"), commitStore: makeAddr("commitStore")}); - - vm.mockCall( - address(s_legacyRMN), abi.encodeWithSelector(s_legacyRMN.isBlessed.selector, taggedRoot), abi.encode(true) - ); - - assertTrue(s_rmnRemote.isBlessed(taggedRoot)); - - vm.mockCall( - address(s_legacyRMN), abi.encodeWithSelector(s_legacyRMN.isBlessed.selector, taggedRoot), abi.encode(false) - ); - - assertFalse(s_rmnRemote.isBlessed(taggedRoot)); - } - - function test_RevertWhen_isBlessedWhen_IsBlessedNotAvailable() public { - IRMN.TaggedRoot memory taggedRoot = IRMN.TaggedRoot({root: keccak256("root"), commitStore: makeAddr("commitStore")}); - - s_rmnRemote = new RMNRemote(100, IRMN(address(0))); - - vm.expectRevert(RMNRemote.IsBlessedNotAvailable.selector); - s_rmnRemote.isBlessed(taggedRoot); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.setConfig.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.setConfig.t.sol deleted file mode 100644 index f6312fea8b..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.setConfig.t.sol +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {RMNRemote} from "../../../rmn/RMNRemote.sol"; -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; - -contract RMNRemote_setConfig is RMNRemoteSetup { - function test_RevertWhen_setConfig_ZeroValueNotAllowed() public { - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: bytes32(0), signers: s_signers, fSign: 1}); - - vm.expectRevert(RMNRemote.ZeroValueNotAllowed.selector); - - s_rmnRemote.setConfig(config); - } - - function test_setConfig_addSigner_removeSigner() public { - uint32 currentConfigVersion = 0; - uint256 numSigners = s_signers.length; - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, fSign: 1}); - - vm.expectEmit(); - emit RMNRemote.ConfigSet(++currentConfigVersion, config); - - s_rmnRemote.setConfig(config); - - // add a signer - address newSigner = makeAddr("new signer"); - s_signers.push(RMNRemote.Signer({onchainPublicKey: newSigner, nodeIndex: uint64(numSigners)})); - config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, fSign: 1}); - - vm.expectEmit(); - emit RMNRemote.ConfigSet(++currentConfigVersion, config); - - s_rmnRemote.setConfig(config); - - (uint32 version, RMNRemote.Config memory gotConfig) = s_rmnRemote.getVersionedConfig(); - assertEq(gotConfig.signers.length, s_signers.length); - assertEq(gotConfig.signers[numSigners].onchainPublicKey, newSigner); - assertEq(gotConfig.signers[numSigners].nodeIndex, uint64(numSigners)); - assertEq(version, currentConfigVersion); - - // remove two signers - s_signers.pop(); - s_signers.pop(); - config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, fSign: 1}); - - vm.expectEmit(); - emit RMNRemote.ConfigSet(++currentConfigVersion, config); - - s_rmnRemote.setConfig(config); - - (version, gotConfig) = s_rmnRemote.getVersionedConfig(); - assertEq(gotConfig.signers.length, s_signers.length); - assertEq(version, currentConfigVersion); - } - - function test_RevertWhen_setConfig_invalidSignerOrder() public { - s_signers.push(RMNRemote.Signer({onchainPublicKey: address(4), nodeIndex: 0})); - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, fSign: 1}); - - vm.expectRevert(RMNRemote.InvalidSignerOrder.selector); - s_rmnRemote.setConfig(config); - } - - function test_RevertWhen_setConfig_notEnoughSigners() public { - RMNRemote.Config memory config = RMNRemote.Config({ - rmnHomeContractConfigDigest: _randomBytes32(), - signers: s_signers, - fSign: uint64(s_signers.length / 2) // at least 2f+1 is required - }); - - vm.expectRevert(RMNRemote.NotEnoughSigners.selector); - s_rmnRemote.setConfig(config); - } - - function test_RevertWhen_setConfig_duplicateOnChainPublicKey() public { - s_signers.push(RMNRemote.Signer({onchainPublicKey: s_signerWallets[0].addr, nodeIndex: uint64(s_signers.length)})); - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, fSign: 1}); - - vm.expectRevert(RMNRemote.DuplicateOnchainPublicKey.selector); - s_rmnRemote.setConfig(config); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.uncurse.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.uncurse.t.sol deleted file mode 100644 index 07072eb977..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.uncurse.t.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {RMNRemote} from "../../../rmn/RMNRemote.sol"; -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; -import {Ownable2Step} from "@chainlink/contracts/src/v0.8/shared/access/Ownable2Step.sol"; - -contract RMNRemote_uncurse is RMNRemoteSetup { - function setUp() public override { - super.setUp(); - s_rmnRemote.curse(s_curseSubjects); - } - - function test_uncurse() public { - vm.expectEmit(); - emit RMNRemote.Uncursed(s_curseSubjects); - - s_rmnRemote.uncurse(s_curseSubjects); - - assertEq(s_rmnRemote.getCursedSubjects().length, 0); - assertFalse(s_rmnRemote.isCursed(CURSE_SUBJ_1)); - assertFalse(s_rmnRemote.isCursed(CURSE_SUBJ_2)); - } - - function test_RevertWhen_uncurse_NotCursed_duplicatedUncurseSubject() public { - s_curseSubjects.push(CURSE_SUBJ_1); - - vm.expectRevert(abi.encodeWithSelector(RMNRemote.NotCursed.selector, CURSE_SUBJ_1)); - s_rmnRemote.uncurse(s_curseSubjects); - } - - function test_RevertWhen_uncurse_calledByNonOwner() public { - vm.expectRevert(Ownable2Step.OnlyCallableByOwner.selector); - vm.stopPrank(); - vm.prank(STRANGER); - s_rmnRemote.uncurse(s_curseSubjects); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.verifywithConfigNotSet.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.verifywithConfigNotSet.t.sol deleted file mode 100644 index f48d87ef62..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.verifywithConfigNotSet.t.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {IRMNRemote} from "../../../interfaces/IRMNRemote.sol"; - -import {Internal} from "../../../libraries/Internal.sol"; -import {RMNRemote} from "../../../rmn/RMNRemote.sol"; -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; - -contract RMNRemote_verify_withConfigNotSet is RMNRemoteSetup { - function test_RevertWhen_verifys() public { - Internal.MerkleRoot[] memory merkleRoots = new Internal.MerkleRoot[](0); - IRMNRemote.Signature[] memory signatures = new IRMNRemote.Signature[](0); - - vm.expectRevert(RMNRemote.ConfigNotSet.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, merkleRoots, signatures); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.verifywithConfigSet.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.verifywithConfigSet.t.sol deleted file mode 100644 index 6a68a14cea..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemote.verifywithConfigSet.t.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {IRMNRemote} from "../../../interfaces/IRMNRemote.sol"; -import {RMNRemote} from "../../../rmn/RMNRemote.sol"; -import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; - -contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { - function setUp() public override { - super.setUp(); - - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, fSign: 3}); - s_rmnRemote.setConfig(config); - _generatePayloadAndSigs(2, 4); - } - - function test_verify() public view { - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); - } - - function test_verify_RevertWhen_InvalidSignature() public { - s_signatures[s_signatures.length - 1].r = 0x0; - - vm.expectRevert(RMNRemote.InvalidSignature.selector); - - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); - } - - function test_verify_RevertWhen_OutOfOrderSignatures_not_sorted() public { - IRMNRemote.Signature memory sig1 = s_signatures[s_signatures.length - 1]; - IRMNRemote.Signature memory sig2 = s_signatures[s_signatures.length - 2]; - - s_signatures[s_signatures.length - 1] = sig2; - s_signatures[s_signatures.length - 2] = sig1; - - vm.expectRevert(RMNRemote.OutOfOrderSignatures.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); - } - - function test_verify_RevertWhen_OutOfOrderSignatures_duplicateSignature() public { - s_signatures[s_signatures.length - 1] = s_signatures[s_signatures.length - 2]; - - vm.expectRevert(RMNRemote.OutOfOrderSignatures.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); - } - - function test_verify_RevertWhen_UnexpectedSigner() public { - _setupSigners(4); // create new signers that aren't configured on RMNRemote - _generatePayloadAndSigs(2, 4); - - vm.expectRevert(RMNRemote.UnexpectedSigner.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); - } - - function test_verify_RevertWhen_ThresholdNotMet() public { - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, fSign: 2}); // 3 = f+1 sigs required - s_rmnRemote.setConfig(config); - - _generatePayloadAndSigs(2, 2); // 2 sigs generated, but 3 required - - vm.expectRevert(RMNRemote.ThresholdNotMet.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemoteSetup.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNRemoteSetup.t.sol deleted file mode 100644 index 7dcc6311c6..0000000000 --- a/chains/evm/contracts/test/rmn/RMNRemote/RMNRemoteSetup.t.sol +++ /dev/null @@ -1,158 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {IRMN} from "../../../interfaces/IRMN.sol"; -import {IRMNRemote} from "../../../interfaces/IRMNRemote.sol"; - -import {Internal} from "../../../libraries/Internal.sol"; -import {RMNRemote} from "../../../rmn/RMNRemote.sol"; -import {BaseTest} from "../../BaseTest.t.sol"; -import {Vm} from "forge-std/Vm.sol"; - -contract RMNRemoteSetup is BaseTest { - RMNRemote public s_rmnRemote; - address public OFF_RAMP_ADDRESS; - - RMNRemote.Signer[] public s_signers; - Vm.Wallet[] public s_signerWallets; - - Internal.MerkleRoot[] internal s_merkleRoots; - IRMNRemote.Signature[] internal s_signatures; - - bytes16 internal constant CURSE_SUBJ_1 = bytes16(keccak256("subject 1")); - bytes16 internal constant CURSE_SUBJ_2 = bytes16(keccak256("subject 2")); - bytes16[] internal s_curseSubjects; - - IRMN internal s_legacyRMN = IRMN(makeAddr("legacyRMN")); - - function setUp() public virtual override { - super.setUp(); - s_rmnRemote = new RMNRemote(1, s_legacyRMN); - OFF_RAMP_ADDRESS = makeAddr("OFF RAMP"); - s_curseSubjects = [CURSE_SUBJ_1, CURSE_SUBJ_2]; - - _setupSigners(10); - } - - /// @notice sets up a list of signers with strictly increasing onchain public keys - /// @dev signers do not have to be in order when configured, but they do when generating signatures - /// rather than sort signers every time, we do it once here and store the sorted list - function _setupSigners( - uint256 numSigners - ) internal { - // remove any existing config - while (s_signerWallets.length > 0) { - s_signerWallets.pop(); - } - while (s_signers.length > 0) { - s_signers.pop(); - } - - for (uint256 i = 0; i < numSigners; ++i) { - s_signerWallets.push(vm.createWallet(vm.randomUint())); - } - - _sort(s_signerWallets); - - for (uint256 i = 0; i < numSigners; ++i) { - s_signers.push(RMNRemote.Signer({onchainPublicKey: s_signerWallets[i].addr, nodeIndex: uint64(i)})); - } - } - - /// @notice generates n merkleRoots and matching valid signatures and populates them into - /// the shared storage vars - function _generatePayloadAndSigs( - uint256 numUpdates, - uint256 numSigs - ) internal { - vm.assertTrue(numUpdates > 0, "need at least 1 dest lane update"); - vm.assertTrue(numSigs <= s_signerWallets.length, "cannot generate more sigs than signers"); - - // remove any existing merkleRoots and sigs - while (s_merkleRoots.length > 0) { - s_merkleRoots.pop(); - } - while (s_signatures.length > 0) { - s_signatures.pop(); - } - - for (uint256 i = 0; i < numUpdates; ++i) { - s_merkleRoots.push(_generateRandomDestLaneUpdate()); - } - - for (uint256 i = 0; i < numSigs; ++i) { - s_signatures.push(_signDestLaneUpdate(s_merkleRoots, s_signerWallets[i])); - } - } - - /// @notice generates a random dest lane update - function _generateRandomDestLaneUpdate() private returns (Internal.MerkleRoot memory) { - uint64 minSeqNum = uint32(vm.randomUint()); - uint64 maxSeqNum = minSeqNum + 100; - return Internal.MerkleRoot({ - sourceChainSelector: uint64(vm.randomUint()), - onRampAddress: abi.encode(vm.randomAddress()), - minSeqNr: minSeqNum, - maxSeqNr: maxSeqNum, - merkleRoot: _randomBytes32() - }); - } - - /// @notice signs the provided payload with the provided wallet - /// @return sig the signature - function _signDestLaneUpdate( - Internal.MerkleRoot[] memory merkleRoots, - Vm.Wallet memory wallet - ) private returns (IRMNRemote.Signature memory) { - (, RMNRemote.Config memory config) = s_rmnRemote.getVersionedConfig(); - bytes32 digest = keccak256( - abi.encode( - s_rmnRemote.getReportDigestHeader(), - RMNRemote.Report({ - destChainId: block.chainid, - destChainSelector: s_rmnRemote.getLocalChainSelector(), - rmnRemoteContractAddress: address(s_rmnRemote), - offrampAddress: OFF_RAMP_ADDRESS, - rmnHomeContractConfigDigest: config.rmnHomeContractConfigDigest, - merkleRoots: merkleRoots - }) - ) - ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(wallet, digest); - // RMNRemote only supports sigs with v=27, so adjust if necessary - // Any valid ECDSA sig (r, s, v) can be "flipped" into (r, s*, v*) without knowing the private key (where v=27 or 28 for secp256k1) - // https://github.com/kadenzipfel/smart-contract-vulnerabilities/blob/master/vulnerabilities/signature-malleability.md - if (v == 28) { - uint256 N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; - s = bytes32(N - uint256(s)); - } - return (IRMNRemote.Signature({r: r, s: s})); - } - - /// @notice bubble sort on a storage array of wallets - function _sort( - Vm.Wallet[] storage wallets - ) private { - bool swapped; - for (uint256 i = 1; i < wallets.length; ++i) { - swapped = false; - for (uint256 j = 0; j < wallets.length - i; ++j) { - Vm.Wallet memory next = wallets[j + 1]; - Vm.Wallet memory actual = wallets[j]; - if (next.addr < actual.addr) { - wallets[j] = next; - wallets[j + 1] = actual; - swapped = true; - } - } - if (!swapped) { - return; - } - } - } - - /// @dev returns a pseudo-random bytes32 - function _randomBytes32() internal returns (bytes32) { - return bytes32(vm.randomUint()); - } -} diff --git a/chains/evm/contracts/test/rmn/RMNRemote/RMNSetup.t.sol b/chains/evm/contracts/test/rmn/RMNRemote/RMNSetup.t.sol new file mode 100644 index 0000000000..6b8f29c928 --- /dev/null +++ b/chains/evm/contracts/test/rmn/RMNRemote/RMNSetup.t.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {RMN} from "../../../rmn/RMN.sol"; +import {BaseTest} from "../../BaseTest.t.sol"; + +contract RMNRemoteSetup is BaseTest { + RMN public s_rmn; + + bytes16 internal constant CURSE_SUBJ_1 = bytes16(keccak256("subject 1")); + bytes16 internal constant CURSE_SUBJ_2 = bytes16(keccak256("subject 2")); + bytes16[] internal s_curseSubjects; + + function setUp() public virtual override { + super.setUp(); + s_rmn = new RMN(new address[](0)); + s_curseSubjects = [CURSE_SUBJ_1, CURSE_SUBJ_2]; + } +} diff --git a/chains/evm/deployment/v1_6_0/operations/fee_quoter/fee_quoter.go b/chains/evm/deployment/v1_6_0/operations/fee_quoter/fee_quoter.go index e87a1cef77..5e574afbae 100644 --- a/chains/evm/deployment/v1_6_0/operations/fee_quoter/fee_quoter.go +++ b/chains/evm/deployment/v1_6_0/operations/fee_quoter/fee_quoter.go @@ -22,7 +22,7 @@ var ContractType cldf_deployment.ContractType = "FeeQuoter" var Version = semver.MustParse("1.6.0") var TypeAndVersion = cldf_deployment.NewTypeAndVersion(ContractType, *Version) -const FeeQuoterABI = `[{"type":"constructor","inputs":[{"name":"staticConfig","type":"tuple","internalType":"struct FeeQuoter.StaticConfig","components":[{"name":"maxFeeJuelsPerMsg","type":"uint96","internalType":"uint96"},{"name":"linkToken","type":"address","internalType":"address"},{"name":"tokenPriceStalenessThreshold","type":"uint32","internalType":"uint32"}]},{"name":"priceUpdaters","type":"address[]","internalType":"address[]"},{"name":"feeTokens","type":"address[]","internalType":"address[]"},{"name":"tokenPriceFeeds","type":"tuple[]","internalType":"struct FeeQuoter.TokenPriceFeedUpdate[]","components":[{"name":"sourceToken","type":"address","internalType":"address"},{"name":"feedConfig","type":"tuple","internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]},{"name":"tokenTransferFeeConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"tokenTransferFeeConfigs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"tokenTransferFeeConfig","type":"tuple","internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]}]},{"name":"premiumMultiplierWeiPerEthArgs","type":"tuple[]","internalType":"struct FeeQuoter.PremiumMultiplierWeiPerEthArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"premiumMultiplierWeiPerEth","type":"uint64","internalType":"uint64"}]},{"name":"destChainConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.DestChainConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"destChainConfig","type":"tuple","internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}]}],"stateMutability":"nonpayable"},{"type":"function","name":"FEE_BASE_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"KEYSTONE_PRICE_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyAuthorizedCallerUpdates","inputs":[{"name":"authorizedCallerArgs","type":"tuple","internalType":"struct AuthorizedCallers.AuthorizedCallerArgs","components":[{"name":"addedCallers","type":"address[]","internalType":"address[]"},{"name":"removedCallers","type":"address[]","internalType":"address[]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyDestChainConfigUpdates","inputs":[{"name":"destChainConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.DestChainConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"destChainConfig","type":"tuple","internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyFeeTokensUpdates","inputs":[{"name":"feeTokensToRemove","type":"address[]","internalType":"address[]"},{"name":"feeTokensToAdd","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyPremiumMultiplierWeiPerEthUpdates","inputs":[{"name":"premiumMultiplierWeiPerEthArgs","type":"tuple[]","internalType":"struct FeeQuoter.PremiumMultiplierWeiPerEthArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"premiumMultiplierWeiPerEth","type":"uint64","internalType":"uint64"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyTokenTransferFeeConfigUpdates","inputs":[{"name":"tokenTransferFeeConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"tokenTransferFeeConfigs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"tokenTransferFeeConfig","type":"tuple","internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]}]},{"name":"tokensToUseDefaultFeeConfigs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigRemoveArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"token","type":"address","internalType":"address"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"convertTokenAmount","inputs":[{"name":"fromToken","type":"address","internalType":"address"},{"name":"fromTokenAmount","type":"uint256","internalType":"uint256"},{"name":"toToken","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAllAuthorizedCallers","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getDestChainConfig","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"tuple","internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getDestinationChainGasPrice","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Internal.TimestampedPackedUint224","components":[{"name":"value","type":"uint224","internalType":"uint224"},{"name":"timestamp","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getFeeTokens","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getPremiumMultiplierWeiPerEth","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"premiumMultiplierWeiPerEth","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getStaticConfig","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct FeeQuoter.StaticConfig","components":[{"name":"maxFeeJuelsPerMsg","type":"uint96","internalType":"uint96"},{"name":"linkToken","type":"address","internalType":"address"},{"name":"tokenPriceStalenessThreshold","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenAndGasPrices","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"destChainSelector","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"tokenPrice","type":"uint224","internalType":"uint224"},{"name":"gasPriceValue","type":"uint224","internalType":"uint224"}],"stateMutability":"view"},{"type":"function","name":"getTokenPrice","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Internal.TimestampedPackedUint224","components":[{"name":"value","type":"uint224","internalType":"uint224"},{"name":"timestamp","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenPriceFeedConfig","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenPrices","inputs":[{"name":"tokens","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct Internal.TimestampedPackedUint224[]","components":[{"name":"value","type":"uint224","internalType":"uint224"},{"name":"timestamp","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenTransferFeeConfig","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"tokenTransferFeeConfig","type":"tuple","internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getValidatedFee","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"message","type":"tuple","internalType":"struct Client.EVM2AnyMessage","components":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"tokenAmounts","type":"tuple[]","internalType":"struct Client.EVMTokenAmount[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"feeToken","type":"address","internalType":"address"},{"name":"extraArgs","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"feeTokenAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidatedTokenPrice","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint224","internalType":"uint224"}],"stateMutability":"view"},{"type":"function","name":"onReport","inputs":[{"name":"metadata","type":"bytes","internalType":"bytes"},{"name":"report","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"processMessageArgs","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"feeToken","type":"address","internalType":"address"},{"name":"feeTokenAmount","type":"uint256","internalType":"uint256"},{"name":"extraArgs","type":"bytes","internalType":"bytes"},{"name":"messageReceiver","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"msgFeeJuels","type":"uint256","internalType":"uint256"},{"name":"isOutOfOrderExecution","type":"bool","internalType":"bool"},{"name":"convertedExtraArgs","type":"bytes","internalType":"bytes"},{"name":"tokenReceiver","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"processPoolReturnData","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"onRampTokenTransfers","type":"tuple[]","internalType":"struct Internal.EVM2AnyTokenTransfer[]","components":[{"name":"sourcePoolAddress","type":"address","internalType":"address"},{"name":"destTokenAddress","type":"bytes","internalType":"bytes"},{"name":"extraData","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"destExecData","type":"bytes","internalType":"bytes"}]},{"name":"sourceTokenAmounts","type":"tuple[]","internalType":"struct Client.EVMTokenAmount[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"destExecDataPerToken","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"setReportPermissions","inputs":[{"name":"permissions","type":"tuple[]","internalType":"struct KeystoneFeedsPermissionHandler.Permission[]","components":[{"name":"forwarder","type":"address","internalType":"address"},{"name":"workflowName","type":"bytes10","internalType":"bytes10"},{"name":"reportName","type":"bytes2","internalType":"bytes2"},{"name":"workflowOwner","type":"address","internalType":"address"},{"name":"isAllowed","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"transferOwnership","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"typeAndVersion","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"updatePrices","inputs":[{"name":"priceUpdates","type":"tuple","internalType":"struct Internal.PriceUpdates","components":[{"name":"tokenPriceUpdates","type":"tuple[]","internalType":"struct Internal.TokenPriceUpdate[]","components":[{"name":"sourceToken","type":"address","internalType":"address"},{"name":"usdPerToken","type":"uint224","internalType":"uint224"}]},{"name":"gasPriceUpdates","type":"tuple[]","internalType":"struct Internal.GasPriceUpdate[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"usdPerUnitGas","type":"uint224","internalType":"uint224"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateTokenPriceFeeds","inputs":[{"name":"tokenPriceFeedUpdates","type":"tuple[]","internalType":"struct FeeQuoter.TokenPriceFeedUpdate[]","components":[{"name":"sourceToken","type":"address","internalType":"address"},{"name":"feedConfig","type":"tuple","internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AuthorizedCallerAdded","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"AuthorizedCallerRemoved","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"DestChainAdded","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"destChainConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}],"anonymous":false},{"type":"event","name":"DestChainConfigUpdated","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"destChainConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}],"anonymous":false},{"type":"event","name":"FeeTokenAdded","inputs":[{"name":"feeToken","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FeeTokenRemoved","inputs":[{"name":"feeToken","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferRequested","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PremiumMultiplierWeiPerEthUpdated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"premiumMultiplierWeiPerEth","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"PriceFeedPerTokenUpdated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"priceFeedConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"anonymous":false},{"type":"event","name":"ReportPermissionSet","inputs":[{"name":"reportId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"permission","type":"tuple","indexed":false,"internalType":"struct KeystoneFeedsPermissionHandler.Permission","components":[{"name":"forwarder","type":"address","internalType":"address"},{"name":"workflowName","type":"bytes10","internalType":"bytes10"},{"name":"reportName","type":"bytes2","internalType":"bytes2"},{"name":"workflowOwner","type":"address","internalType":"address"},{"name":"isAllowed","type":"bool","internalType":"bool"}]}],"anonymous":false},{"type":"event","name":"TokenTransferFeeConfigDeleted","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenTransferFeeConfigUpdated","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"tokenTransferFeeConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"anonymous":false},{"type":"event","name":"UsdPerTokenUpdated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UsdPerUnitGasUpdated","inputs":[{"name":"destChain","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"CannotTransferToSelf","inputs":[]},{"type":"error","name":"DataFeedValueOutOfUint224Range","inputs":[]},{"type":"error","name":"DestinationChainNotEnabled","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"ExtraArgOutOfOrderExecutionMustBeTrue","inputs":[]},{"type":"error","name":"FeeTokenNotSupported","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Invalid32ByteAddress","inputs":[{"name":"encodedAddress","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidChainFamilySelector","inputs":[{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"InvalidDestBytesOverhead","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidDestChainConfig","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"InvalidEVMAddress","inputs":[{"name":"encodedAddress","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidExtraArgsData","inputs":[]},{"type":"error","name":"InvalidExtraArgsTag","inputs":[]},{"type":"error","name":"InvalidFeeRange","inputs":[{"name":"minFeeUSDCents","type":"uint256","internalType":"uint256"},{"name":"maxFeeUSDCents","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSVMExtraArgsWritableBitmap","inputs":[{"name":"accountIsWritableBitmap","type":"uint64","internalType":"uint64"},{"name":"numAccounts","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticConfig","inputs":[]},{"type":"error","name":"InvalidTokenReceiver","inputs":[]},{"type":"error","name":"MessageComputeUnitLimitTooHigh","inputs":[]},{"type":"error","name":"MessageFeeTooHigh","inputs":[{"name":"msgFeeJuels","type":"uint256","internalType":"uint256"},{"name":"maxFeeJuelsPerMsg","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"MessageGasLimitTooHigh","inputs":[]},{"type":"error","name":"MessageTooLarge","inputs":[{"name":"maxSize","type":"uint256","internalType":"uint256"},{"name":"actualSize","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"MustBeProposedOwner","inputs":[]},{"type":"error","name":"OnlyCallableByOwner","inputs":[]},{"type":"error","name":"OwnerCannotBeZero","inputs":[]},{"type":"error","name":"ReportForwarderUnauthorized","inputs":[{"name":"forwarder","type":"address","internalType":"address"},{"name":"workflowOwner","type":"address","internalType":"address"},{"name":"workflowName","type":"bytes10","internalType":"bytes10"},{"name":"reportName","type":"bytes2","internalType":"bytes2"}]},{"type":"error","name":"SourceTokenDataTooLarge","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"StaleGasPrice","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"timePassed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"TokenNotSupported","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"TooManySVMExtraArgsAccounts","inputs":[{"name":"numAccounts","type":"uint256","internalType":"uint256"},{"name":"maxAccounts","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UnauthorizedCaller","inputs":[{"name":"caller","type":"address","internalType":"address"}]},{"type":"error","name":"UnsupportedNumberOfTokens","inputs":[{"name":"numberOfTokens","type":"uint256","internalType":"uint256"},{"name":"maxNumberOfTokensPerMsg","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ZeroAddressNotAllowed","inputs":[]}]` +const FeeQuoterABI = `[{"type":"constructor","inputs":[{"name":"staticConfig","type":"tuple","internalType":"struct FeeQuoter.StaticConfig","components":[{"name":"maxFeeJuelsPerMsg","type":"uint96","internalType":"uint96"},{"name":"linkToken","type":"address","internalType":"address"},{"name":"tokenPriceStalenessThreshold","type":"uint32","internalType":"uint32"}]},{"name":"priceUpdaters","type":"address[]","internalType":"address[]"},{"name":"feeTokens","type":"address[]","internalType":"address[]"},{"name":"tokenPriceFeeds","type":"tuple[]","internalType":"struct FeeQuoter.TokenPriceFeedUpdate[]","components":[{"name":"sourceToken","type":"address","internalType":"address"},{"name":"feedConfig","type":"tuple","internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]},{"name":"tokenTransferFeeConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"tokenTransferFeeConfigs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"tokenTransferFeeConfig","type":"tuple","internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]}]},{"name":"premiumMultiplierWeiPerEthArgs","type":"tuple[]","internalType":"struct FeeQuoter.FeeTokenArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"premiumMultiplierWeiPerEth","type":"uint64","internalType":"uint64"}]},{"name":"destChainConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.DestChainConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"destChainConfig","type":"tuple","internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}]}],"stateMutability":"nonpayable"},{"type":"function","name":"FEE_BASE_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"KEYSTONE_PRICE_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyAuthorizedCallerUpdates","inputs":[{"name":"authorizedCallerArgs","type":"tuple","internalType":"struct AuthorizedCallers.AuthorizedCallerArgs","components":[{"name":"addedCallers","type":"address[]","internalType":"address[]"},{"name":"removedCallers","type":"address[]","internalType":"address[]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyDestChainConfigUpdates","inputs":[{"name":"destChainConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.DestChainConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"destChainConfig","type":"tuple","internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyFeeTokensUpdates","inputs":[{"name":"feeTokensToRemove","type":"address[]","internalType":"address[]"},{"name":"feeTokensToAdd","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyPremiumMultiplierWeiPerEthUpdates","inputs":[{"name":"premiumMultiplierWeiPerEthArgs","type":"tuple[]","internalType":"struct FeeQuoter.FeeTokenArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"premiumMultiplierWeiPerEth","type":"uint64","internalType":"uint64"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applyTokenTransferFeeConfigUpdates","inputs":[{"name":"tokenTransferFeeConfigArgs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"tokenTransferFeeConfigs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"tokenTransferFeeConfig","type":"tuple","internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]}]},{"name":"tokensToUseDefaultFeeConfigs","type":"tuple[]","internalType":"struct FeeQuoter.TokenTransferFeeConfigRemoveArgs[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"token","type":"address","internalType":"address"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"convertTokenAmount","inputs":[{"name":"fromToken","type":"address","internalType":"address"},{"name":"fromTokenAmount","type":"uint256","internalType":"uint256"},{"name":"toToken","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAllAuthorizedCallers","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getDestChainConfig","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"tuple","internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getDestinationChainGasPrice","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Internal.TimestampedPackedUint224","components":[{"name":"value","type":"uint224","internalType":"uint224"},{"name":"timestamp","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getFeeTokens","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getPremiumMultiplierWeiPerEth","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"premiumMultiplierWeiPerEth","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getStaticConfig","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct FeeQuoter.StaticConfig","components":[{"name":"maxFeeJuelsPerMsg","type":"uint96","internalType":"uint96"},{"name":"linkToken","type":"address","internalType":"address"},{"name":"tokenPriceStalenessThreshold","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenAndGasPrices","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"destChainSelector","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"tokenPrice","type":"uint224","internalType":"uint224"},{"name":"gasPriceValue","type":"uint224","internalType":"uint224"}],"stateMutability":"view"},{"type":"function","name":"getTokenPrice","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Internal.TimestampedPackedUint224","components":[{"name":"value","type":"uint224","internalType":"uint224"},{"name":"timestamp","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenPriceFeedConfig","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenPrices","inputs":[{"name":"tokens","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct Internal.TimestampedPackedUint224[]","components":[{"name":"value","type":"uint224","internalType":"uint224"},{"name":"timestamp","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getTokenTransferFeeConfig","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"tokenTransferFeeConfig","type":"tuple","internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getValidatedFee","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"message","type":"tuple","internalType":"struct Client.EVM2AnyMessage","components":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"tokenAmounts","type":"tuple[]","internalType":"struct Client.EVMTokenAmount[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"feeToken","type":"address","internalType":"address"},{"name":"extraArgs","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"feeTokenAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidatedTokenPrice","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint224","internalType":"uint224"}],"stateMutability":"view"},{"type":"function","name":"onReport","inputs":[{"name":"metadata","type":"bytes","internalType":"bytes"},{"name":"report","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"processMessageArgs","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"feeToken","type":"address","internalType":"address"},{"name":"feeTokenAmount","type":"uint256","internalType":"uint256"},{"name":"extraArgs","type":"bytes","internalType":"bytes"},{"name":"messageReceiver","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"msgFeeJuels","type":"uint256","internalType":"uint256"},{"name":"isOutOfOrderExecution","type":"bool","internalType":"bool"},{"name":"convertedExtraArgs","type":"bytes","internalType":"bytes"},{"name":"tokenReceiver","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"processPoolReturnData","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"onRampTokenTransfers","type":"tuple[]","internalType":"struct Internal.EVM2AnyTokenTransfer[]","components":[{"name":"sourcePoolAddress","type":"address","internalType":"address"},{"name":"destTokenAddress","type":"bytes","internalType":"bytes"},{"name":"extraData","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"destExecData","type":"bytes","internalType":"bytes"}]},{"name":"sourceTokenAmounts","type":"tuple[]","internalType":"struct Client.EVMTokenAmount[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"destExecDataPerToken","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"setReportPermissions","inputs":[{"name":"permissions","type":"tuple[]","internalType":"struct KeystoneFeedsPermissionHandler.Permission[]","components":[{"name":"forwarder","type":"address","internalType":"address"},{"name":"workflowName","type":"bytes10","internalType":"bytes10"},{"name":"reportName","type":"bytes2","internalType":"bytes2"},{"name":"workflowOwner","type":"address","internalType":"address"},{"name":"isAllowed","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"transferOwnership","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"typeAndVersion","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"updatePrices","inputs":[{"name":"priceUpdates","type":"tuple","internalType":"struct Internal.PriceUpdates","components":[{"name":"tokenPriceUpdates","type":"tuple[]","internalType":"struct Internal.TokenPriceUpdate[]","components":[{"name":"sourceToken","type":"address","internalType":"address"},{"name":"usdPerToken","type":"uint224","internalType":"uint224"}]},{"name":"gasPriceUpdates","type":"tuple[]","internalType":"struct Internal.GasPriceUpdate[]","components":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"usdPerUnitGas","type":"uint224","internalType":"uint224"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateTokenPriceFeeds","inputs":[{"name":"tokenPriceFeedUpdates","type":"tuple[]","internalType":"struct FeeQuoter.TokenPriceFeedUpdate[]","components":[{"name":"sourceToken","type":"address","internalType":"address"},{"name":"feedConfig","type":"tuple","internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AuthorizedCallerAdded","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"AuthorizedCallerRemoved","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"DestChainAdded","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"destChainConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}],"anonymous":false},{"type":"event","name":"DestChainConfigUpdated","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"destChainConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.DestChainConfig","components":[{"name":"isEnabled","type":"bool","internalType":"bool"},{"name":"maxNumberOfTokensPerMsg","type":"uint16","internalType":"uint16"},{"name":"maxDataBytes","type":"uint32","internalType":"uint32"},{"name":"maxPerMsgGasLimit","type":"uint32","internalType":"uint32"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destGasPerPayloadByteBase","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteHigh","type":"uint8","internalType":"uint8"},{"name":"destGasPerPayloadByteThreshold","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityOverheadGas","type":"uint32","internalType":"uint32"},{"name":"destGasPerDataAvailabilityByte","type":"uint16","internalType":"uint16"},{"name":"destDataAvailabilityMultiplierBps","type":"uint16","internalType":"uint16"},{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"},{"name":"enforceOutOfOrder","type":"bool","internalType":"bool"},{"name":"defaultTokenFeeUSDCents","type":"uint16","internalType":"uint16"},{"name":"defaultTokenDestGasOverhead","type":"uint32","internalType":"uint32"},{"name":"defaultTxGasLimit","type":"uint32","internalType":"uint32"},{"name":"gasMultiplierWeiPerEth","type":"uint64","internalType":"uint64"},{"name":"gasPriceStalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"networkFeeUSDCents","type":"uint32","internalType":"uint32"}]}],"anonymous":false},{"type":"event","name":"FeeTokenAdded","inputs":[{"name":"feeToken","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FeeTokenRemoved","inputs":[{"name":"feeToken","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferRequested","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PremiumMultiplierWeiPerEthUpdated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"premiumMultiplierWeiPerEth","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"PriceFeedPerTokenUpdated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"priceFeedConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.TokenPriceFeedConfig","components":[{"name":"dataFeedAddress","type":"address","internalType":"address"},{"name":"tokenDecimals","type":"uint8","internalType":"uint8"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"anonymous":false},{"type":"event","name":"ReportPermissionSet","inputs":[{"name":"reportId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"permission","type":"tuple","indexed":false,"internalType":"struct KeystoneFeedsPermissionHandler.Permission","components":[{"name":"forwarder","type":"address","internalType":"address"},{"name":"workflowName","type":"bytes10","internalType":"bytes10"},{"name":"reportName","type":"bytes2","internalType":"bytes2"},{"name":"workflowOwner","type":"address","internalType":"address"},{"name":"isAllowed","type":"bool","internalType":"bool"}]}],"anonymous":false},{"type":"event","name":"TokenTransferFeeConfigDeleted","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenTransferFeeConfigUpdated","inputs":[{"name":"destChainSelector","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"tokenTransferFeeConfig","type":"tuple","indexed":false,"internalType":"struct FeeQuoter.TokenTransferFeeConfig","components":[{"name":"minFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"maxFeeUSDCents","type":"uint32","internalType":"uint32"},{"name":"deciBps","type":"uint16","internalType":"uint16"},{"name":"destGasOverhead","type":"uint32","internalType":"uint32"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"},{"name":"isEnabled","type":"bool","internalType":"bool"}]}],"anonymous":false},{"type":"event","name":"UsdPerTokenUpdated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UsdPerUnitGasUpdated","inputs":[{"name":"destChain","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"CannotTransferToSelf","inputs":[]},{"type":"error","name":"DataFeedValueOutOfUint224Range","inputs":[]},{"type":"error","name":"DestinationChainNotEnabled","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"ExtraArgOutOfOrderExecutionMustBeTrue","inputs":[]},{"type":"error","name":"FeeTokenNotSupported","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Invalid32ByteAddress","inputs":[{"name":"encodedAddress","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidChainFamilySelector","inputs":[{"name":"chainFamilySelector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"InvalidDestBytesOverhead","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"destBytesOverhead","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidDestChainConfig","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"InvalidEVMAddress","inputs":[{"name":"encodedAddress","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidExtraArgsData","inputs":[]},{"type":"error","name":"InvalidExtraArgsTag","inputs":[]},{"type":"error","name":"InvalidFeeRange","inputs":[{"name":"minFeeUSDCents","type":"uint256","internalType":"uint256"},{"name":"maxFeeUSDCents","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSVMExtraArgsWritableBitmap","inputs":[{"name":"accountIsWritableBitmap","type":"uint64","internalType":"uint64"},{"name":"numAccounts","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticConfig","inputs":[]},{"type":"error","name":"InvalidTokenReceiver","inputs":[]},{"type":"error","name":"MessageComputeUnitLimitTooHigh","inputs":[]},{"type":"error","name":"MessageFeeTooHigh","inputs":[{"name":"msgFeeJuels","type":"uint256","internalType":"uint256"},{"name":"maxFeeJuelsPerMsg","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"MessageGasLimitTooHigh","inputs":[]},{"type":"error","name":"MessageTooLarge","inputs":[{"name":"maxSize","type":"uint256","internalType":"uint256"},{"name":"actualSize","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"MustBeProposedOwner","inputs":[]},{"type":"error","name":"OnlyCallableByOwner","inputs":[]},{"type":"error","name":"OwnerCannotBeZero","inputs":[]},{"type":"error","name":"ReportForwarderUnauthorized","inputs":[{"name":"forwarder","type":"address","internalType":"address"},{"name":"workflowOwner","type":"address","internalType":"address"},{"name":"workflowName","type":"bytes10","internalType":"bytes10"},{"name":"reportName","type":"bytes2","internalType":"bytes2"}]},{"type":"error","name":"SourceTokenDataTooLarge","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"StaleGasPrice","inputs":[{"name":"destChainSelector","type":"uint64","internalType":"uint64"},{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"timePassed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"TokenNotSupported","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"TooManySVMExtraArgsAccounts","inputs":[{"name":"numAccounts","type":"uint256","internalType":"uint256"},{"name":"maxAccounts","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UnauthorizedCaller","inputs":[{"name":"caller","type":"address","internalType":"address"}]},{"type":"error","name":"UnsupportedNumberOfTokens","inputs":[{"name":"numberOfTokens","type":"uint256","internalType":"uint256"},{"name":"maxNumberOfTokensPerMsg","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ZeroAddressNotAllowed","inputs":[]}]` const FeeQuoterBin = "0x60e06040523461109a576173ec8038038061001981611306565b928339810190808203610120811261109a5760601361109a5761003a6112c8565b81516001600160601b038116810361109a57815261005a6020830161132b565b906020810191825261006e6040840161133f565b6040820190815260608401516001600160401b03811161109a5785610094918601611367565b60808501519094906001600160401b03811161109a57866100b6918301611367565b60a08201519096906001600160401b03811161109a5782019080601f8301121561109a5781516100ed6100e882611350565b611306565b9260208085848152019260071b8201019083821161109a57602001915b8183106112535750505060c08301516001600160401b03811161109a5783019781601f8a01121561109a578851986101446100e88b611350565b996020808c838152019160051b8301019184831161109a5760208101915b8383106110f1575050505060e08401516001600160401b03811161109a5784019382601f8601121561109a57845161019c6100e882611350565b9560208088848152019260061b8201019085821161109a57602001915b8183106110b557505050610100810151906001600160401b03821161109a570182601f8201121561109a578051906101f36100e883611350565b93602061028081878681520194028301019181831161109a57602001925b828410610ed857505050503315610ec757600180546001600160a01b031916331790556020986102408a611306565b976000895260003681376102526112e7565b998a52888b8b015260005b89518110156102c4576001906001600160a01b0361027b828d611400565b51168d610287826115ec565b610294575b50500161025d565b7fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda7758091604051908152a1388d61028c565b508a985089519660005b885181101561033f576001600160a01b036102e9828b611400565b511690811561032e577feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef8c83610320600195611574565b50604051908152a1016102ce565b6342bcdf7f60e11b60005260046000fd5b5081518a985089906001600160a01b0316158015610eb5575b8015610ea6575b610e955791516001600160a01b031660a05290516001600160601b03166080525163ffffffff1660c05261039286611306565b9360008552600036813760005b855181101561040e576001906103c76001600160a01b036103c0838a611400565b5116611481565b6103d2575b0161039f565b818060a01b036103e28289611400565b51167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f91600080a26103cc565b508694508560005b84518110156104855760019061043e6001600160a01b036104378389611400565b51166115b3565b610449575b01610416565b818060a01b036104598288611400565b51167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba23600080a2610443565b508593508460005b835181101561054757806104a360019286611400565b517fe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf606089858060a01b038451169301518360005260078b5260406000209060ff878060a01b038251169283898060a01b03198254161781558d8301908151604082549501948460a81b8651151560a81b16918560a01b9060a01b169061ffff60a01b19161717905560405193845251168c8301525115156040820152a20161048d565b5091509160005b8251811015610b2d576105618184611400565b51856001600160401b036105758487611400565b5151169101519080158015610b1a575b8015610afc575b8015610a92575b610a7e57600081815260098852604090205460019392919060081b6001600160e01b03191661093657807f71e9302ab4e912a9678ae7f5a8542856706806f2817e1bf2a20b171e265cb4ad604051806106fc868291909161024063ffffffff8161026084019580511515855261ffff602082015116602086015282604082015116604086015282606082015116606086015282608082015116608086015260ff60a08201511660a086015260ff60c08201511660c086015261ffff60e08201511660e0860152826101008201511661010086015261ffff6101208201511661012086015261ffff610140820151166101408601528260e01b61016082015116610160860152610180810151151561018086015261ffff6101a0820151166101a0860152826101c0820151166101c0860152826101e0820151166101e086015260018060401b03610200820151166102008601528261022082015116610220860152015116910152565b0390a25b60005260098752826040600020825115158382549162ffff008c83015160081b169066ffffffff000000604084015160181b166affffffff00000000000000606085015160381b16926effffffff0000000000000000000000608086015160581b169260ff60781b60a087015160781b169460ff60801b60c088015160801b169161ffff60881b60e089015160881b169063ffffffff60981b6101008a015160981b169361ffff60b81b6101208b015160b81b169661ffff60c81b6101408c015160c81b169963ffffffff60d81b6101608d015160081c169b61018060ff60f81b910151151560f81b169c8f8060f81b039a63ffffffff60d81b199961ffff60c81b199861ffff60b81b199763ffffffff60981b199661ffff60881b199560ff60801b199460ff60781b19936effffffff0000000000000000000000199260ff6affffffff000000000000001992169066ffffffffffffff19161716171617161716171617161716171617161716179063ffffffff60d81b1617178155019061ffff6101a0820151169082549165ffffffff00006101c083015160101b169269ffffffff0000000000006101e084015160301b166a01000000000000000000008860901b0361020085015160501b169263ffffffff60901b61022086015160901b169461024063ffffffff60b01b91015160b01b169563ffffffff60b01b199363ffffffff60901b19926a01000000000000000000008c60901b0319918c8060501b03191617161716171617171790550161054e565b807f2431cc0363f2f66b21782c7e3d54dd9085927981a21bd0cc6be45a51b19689e360405180610a76868291909161024063ffffffff8161026084019580511515855261ffff602082015116602086015282604082015116604086015282606082015116606086015282608082015116608086015260ff60a08201511660a086015260ff60c08201511660c086015261ffff60e08201511660e0860152826101008201511661010086015261ffff6101208201511661012086015261ffff610140820151166101408601528260e01b61016082015116610160860152610180810151151561018086015261ffff6101a0820151166101a0860152826101c0820151166101c0860152826101e0820151166101e086015260018060401b03610200820151166102008601528261022082015116610220860152015116910152565b0390a2610700565b63c35aa79d60e01b60005260045260246000fd5b5063ffffffff60e01b61016083015116630a04b54b60e21b8114159081610aea575b81610ad8575b81610ac6575b50610593565b63c4e0595360e01b1415905088610ac0565b632b1dfffb60e21b8114159150610aba565b6307842f7160e21b8114159150610ab4565b5063ffffffff6101e08301511663ffffffff6060840151161061058c565b5063ffffffff6101e08301511615610585565b84828560005b8151811015610bb3576001906001600160a01b03610b518285611400565b5151167fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d86848060401b0381610b878689611400565b510151168360005260088252604060002081878060401b0319825416179055604051908152a201610b33565b83600184610bc083611306565b9060008252600092610e90575b909282935b8251851015610dcf57610be58584611400565b5180516001600160401b0316939083019190855b83518051821015610dbe57610c0f828792611400565b51015184516001600160a01b0390610c28908490611400565b5151169063ffffffff815116908781019163ffffffff8351169081811015610da95750506080810163ffffffff815116898110610d92575090899291838c52600a8a5260408c20600160a01b6001900386168d528a5260408c2092825163ffffffff169380549180518d1b67ffffffff0000000016916040860192835160401b69ffff000000000000000016966060810195865160501b6dffffffff00000000000000000000169063ffffffff60701b895160701b169260a001998b60ff60901b8c51151560901b169560ff60901b199363ffffffff60701b19926dffffffff000000000000000000001991600160501b60019003191617161716171617171790556040519586525163ffffffff168c8601525161ffff1660408501525163ffffffff1660608401525163ffffffff16608083015251151560a082015260c07f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b591a3600101610bf9565b6312766e0160e11b8c52600485905260245260448bfd5b6305a7b3d160e11b8c5260045260245260448afd5b505060019096019593509050610bd2565b9150825b8251811015610e51576001906001600160401b03610df18286611400565b515116828060a01b0384610e058488611400565b5101511690808752600a855260408720848060a01b038316885285528660408120557f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b8780a301610dd3565b604051615d6b908161168182396080518181816105dc0152610c33015260a0518181816106120152610be4015260c05181818161063901526138980152f35b610bcd565b63d794ef9560e01b60005260046000fd5b5063ffffffff8251161561035f565b5080516001600160601b031615610358565b639b15e16f60e01b60005260046000fd5b838203610280811261109a57610260610eef6112e7565b91610ef9876113dd565b8352601f19011261109a576040519161026083016001600160401b0381118482101761109f57604052610f2e602087016113d0565b8352610f3c604087016113f1565b6020840152610f4d6060870161133f565b6040840152610f5e6080870161133f565b6060840152610f6f60a0870161133f565b6080840152610f8060c087016113c2565b60a0840152610f9160e087016113c2565b60c0840152610fa361010087016113f1565b60e0840152610fb5610120870161133f565b610100840152610fc861014087016113f1565b610120840152610fdb61016087016113f1565b610140840152610180860151916001600160e01b03198316830361109a57836020936101606102809601526110136101a089016113d0565b6101808201526110266101c089016113f1565b6101a08201526110396101e0890161133f565b6101c082015261104c610200890161133f565b6101e082015261105f61022089016113dd565b610200820152611072610240890161133f565b610220820152611085610260890161133f565b61024082015283820152815201930192610211565b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408387031261109a5760206040916110cc6112e7565b6110d58661132b565b81526110e28387016113dd565b838201528152019201916101b9565b82516001600160401b03811161109a5782016040818803601f19011261109a576111196112e7565b90611126602082016113dd565b825260408101516001600160401b03811161109a57602091010187601f8201121561109a5780516111596100e882611350565b91602060e08185858152019302820101908a821161109a57602001915b8183106111955750505091816020938480940152815201920191610162565b828b0360e0811261109a5760c06111aa6112e7565b916111b48661132b565b8352601f19011261109a576040519160c08301916001600160401b0383118484101761109f5760e0936020936040526111ee84880161133f565b81526111fc6040880161133f565b8482015261120c606088016113f1565b604082015261121d6080880161133f565b606082015261122e60a0880161133f565b608082015261123f60c088016113d0565b60a082015283820152815201920191611176565b8284036080811261109a5760606112686112e7565b916112728661132b565b8352601f19011261109a5760809160209161128b6112c8565b61129684880161132b565b81526112a4604088016113c2565b848201526112b4606088016113d0565b60408201528382015281520192019161010a565b60405190606082016001600160401b0381118382101761109f57604052565b60408051919082016001600160401b0381118382101761109f57604052565b6040519190601f01601f191682016001600160401b0381118382101761109f57604052565b51906001600160a01b038216820361109a57565b519063ffffffff8216820361109a57565b6001600160401b03811161109f5760051b60200190565b9080601f8301121561109a5781516113816100e882611350565b9260208085848152019260051b82010192831161109a57602001905b8282106113aa5750505090565b602080916113b78461132b565b81520191019061139d565b519060ff8216820361109a57565b5190811515820361109a57565b51906001600160401b038216820361109a57565b519061ffff8216820361109a57565b80518210156114145760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b80548210156114145760005260206000200190600090565b8054801561146b576000190190611459828261142a565b8154906000199060031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b6000818152600c6020526040902054801561154257600019810181811161152c57600b5460001981019190821161152c578181036114db575b5050506114c7600b611442565b600052600c60205260006040812055600190565b6115146114ec6114fd93600b61142a565b90549060031b1c928392600b61142a565b819391549060031b91821b91600019901b19161790565b9055600052600c6020526040600020553880806114ba565b634e487b7160e01b600052601160045260246000fd5b5050600090565b8054906801000000000000000082101561109f57816114fd9160016115709401815561142a565b9055565b806000526003602052604060002054156000146115ad57611596816002611549565b600254906000526003602052604060002055600190565b50600090565b80600052600c602052604060002054156000146115ad576115d581600b611549565b600b5490600052600c602052604060002055600190565b600081815260036020526040902054801561154257600019810181811161152c5760025460001981019190821161152c57808203611646575b5050506116326002611442565b600052600360205260006040812055600190565b6116686116576114fd93600261142a565b90549060031b1c928392600261142a565b9055600052600360205260406000205538808061162556fe6080604052600436101561001257600080fd5b60003560e01c806241e5be1461021657806301447eaa1461021157806301ffc9a71461020c578063061877e31461020757806306285c6914610202578063181f5a77146101fd5780632451a627146101f8578063325c868e146101f35780633937306f146101ee5780633a49bb49146101e957806341ed29e7146101e457806345ac924d146101df5780634ab35b0b146101da578063514e8cff146101d55780636def4ce7146101d0578063770e2dc4146101cb57806379ba5097146101c65780637afac322146101c1578063805f2132146101bc57806382b49eb0146101b757806387b8d879146101b25780638da5cb5b146101ad57806391a2749a146101a8578063a69c64c0146101a3578063bf78e03f1461019e578063cdc73d5114610199578063d02641a014610194578063d63d3af21461018f578063d8694ccd1461018a578063f2fde38b14610185578063fbe3f778146101805763ffdb4b371461017b57600080fd5b612642565b612545565b612489565b612056565b61203a565b611ff1565b611f7a565b611ed4565b611e1b565b611d87565b611d60565b611b44565b6119c7565b61172c565b6115f3565b6114db565b6112bc565b61113d565b610f7e565b610f46565b610e7d565b610ce8565b610b72565b610898565b61087c565b6107f9565b610757565b6105a0565b610558565b610464565b6103b0565b61023e565b6001600160a01b0381160361022c57565b600080fd5b359061023c8261021b565b565b3461022c57606060031936011261022c5760206102756004356102608161021b565b602435604435916102708361021b565b6127f2565b604051908152f35b6004359067ffffffffffffffff8216820361022c57565b6024359067ffffffffffffffff8216820361022c57565b359067ffffffffffffffff8216820361022c57565b9181601f8401121561022c5782359167ffffffffffffffff831161022c576020808501948460051b01011161022c57565b919082519283825260005b84811061031d575050601f19601f8460006020809697860101520116010190565b806020809284010151828286010152016102fc565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061036557505050505090565b90919293946020806103a1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516102f1565b97019301930191939290610356565b3461022c57606060031936011261022c576103c961027d565b60243567ffffffffffffffff811161022c576103e99036906004016102c0565b6044929192359167ffffffffffffffff831161022c573660238401121561022c5782600401359167ffffffffffffffff831161022c573660248460061b8601011161022c5761044b94602461043f950192612a00565b60405191829182610332565b0390f35b35906001600160e01b03198216820361022c57565b3461022c57602060031936011261022c576004356001600160e01b03198116810361022c576001600160e01b0319602091167f805f213200000000000000000000000000000000000000000000000000000000811490811561052e575b8115610504575b81156104da575b506040519015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386104cf565b7f181f5a7700000000000000000000000000000000000000000000000000000000811491506104c8565b7fe364892e00000000000000000000000000000000000000000000000000000000811491506104c1565b3461022c57602060031936011261022c576001600160a01b0360043561057d8161021b565b166000526008602052602067ffffffffffffffff60406000205416604051908152f35b3461022c57600060031936011261022c576105b9612c19565b5060606040516105c8816106a0565b63ffffffff6bffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918281526001600160a01b0360406020830192827f00000000000000000000000000000000000000000000000000000000000000001684520191837f00000000000000000000000000000000000000000000000000000000000000001683526040519485525116602084015251166040820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176106bc57604052565b610671565b60a0810190811067ffffffffffffffff8211176106bc57604052565b6040810190811067ffffffffffffffff8211176106bc57604052565b60c0810190811067ffffffffffffffff8211176106bc57604052565b90601f601f19910116810190811067ffffffffffffffff8211176106bc57604052565b6040519061023c604083610715565b6040519061023c61026083610715565b3461022c57600060031936011261022c5761044b604080519061077a8183610715565b600f82527f46656551756f74657220312e362e3000000000000000000000000000000000006020830152519182916020835260208301906102f1565b602060408183019282815284518094520192019060005b8181106107da5750505090565b82516001600160a01b03168452602093840193909201916001016107cd565b3461022c57600060031936011261022c5760405180602060025491828152019060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9060005b8181106108665761044b8561085a81870382610715565b604051918291826107b6565b8254845260209093019260019283019201610843565b3461022c57600060031936011261022c57602060405160248152f35b3461022c57602060031936011261022c5760043567ffffffffffffffff811161022c5780600401906040600319823603011261022c576108d6613d82565b6108e08280612c38565b4263ffffffff1692915060005b818110610a39575050602401906109048284612c38565b92905060005b83811061091357005b8061093261092d600193610927868a612c38565b9061289b565b612cd7565b7fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e67ffffffffffffffff610a15610a0760208501946109f961097b87516001600160e01b031690565b610995610986610738565b6001600160e01b039092168252565b63ffffffff8c1660208201526109d06109b6845167ffffffffffffffff1690565b67ffffffffffffffff166000526005602052604060002090565b815160209092015160e01b6001600160e01b0319166001600160e01b0392909216919091179055565b5167ffffffffffffffff1690565b93516001600160e01b031690565b604080516001600160e01b039290921682524260208301529190931692a20161090a565b80610a52610a4d6001936109278980612c38565b612ca0565b7f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a6001600160a01b03610aeb610a076020850194610ade610a9a87516001600160e01b031690565b610aa5610986610738565b63ffffffff8d1660208201526109d0610ac584516001600160a01b031690565b6001600160a01b03166000526006602052604060002090565b516001600160a01b031690565b604080516001600160e01b039290921682524260208301529190931692a2016108ed565b9181601f8401121561022c5782359167ffffffffffffffff831161022c576020838186019501011161022c57565b92610b6f9492610b61928552151560208501526080604085015260808401906102f1565b9160608184039101526102f1565b90565b3461022c5760a060031936011261022c57610b8b61027d565b60243590610b988261021b565b6044359160643567ffffffffffffffff811161022c57610bbc903690600401610b0f565b93909160843567ffffffffffffffff811161022c57610bdf903690600401610b0f565b9290917f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0382166001600160a01b03821614600014610cab575050935b6bffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016808611610c7a575091610c6b939161044b9693613dc6565b90939160405194859485610b3d565b857f6a92a4830000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b91610cb5926127f2565b93610c24565b67ffffffffffffffff81116106bc5760051b60200190565b8015150361022c57565b359061023c82610cd3565b3461022c57602060031936011261022c5760043567ffffffffffffffff811161022c573660238201121561022c57806004013590610d2582610cbb565b90610d336040519283610715565b828252602460a06020840194028201019036821161022c57602401925b818410610d6257610d6083612cfc565b005b60a08436031261022c5760405190610d79826106c1565b8435610d848161021b565b825260208501357fffffffffffffffffffff000000000000000000000000000000000000000000008116810361022c5760208301526040850135907fffff0000000000000000000000000000000000000000000000000000000000008216820361022c5782602092604060a0950152610dff60608801610231565b6060820152610e1060808801610cdd565b6080820152815201930192610d50565b602060408183019282815284518094520192019060005b818110610e445750505090565b9091926020604082610e72600194885163ffffffff602080926001600160e01b038151168552015116910152565b019401929101610e37565b3461022c57602060031936011261022c5760043567ffffffffffffffff811161022c57610eae9036906004016102c0565b610eb781610cbb565b91610ec56040519384610715565b818352601f19610ed483610cbb565b0160005b818110610f2f57505060005b82811015610f2157600190610f05610f008260051b85016128b0565b613844565b610f0f82876129ec565b52610f1a81866129ec565b5001610ee4565b6040518061044b8682610e20565b602090610f3a612e5a565b82828801015201610ed8565b3461022c57602060031936011261022c576020610f6d600435610f688161021b565b613b24565b6001600160e01b0360405191168152f35b3461022c57602060031936011261022c5767ffffffffffffffff610fa061027d565b610fa8612e5a565b50166000526005602052604060002060405190610fc4826106dd565b546001600160e01b038116825260e01c6020820152604051809161044b82604081019263ffffffff602080926001600160e01b038151168552015116910152565b61023c909291926102408061026083019561102284825115159052565b60208181015161ffff169085015260408181015163ffffffff169085015260608181015163ffffffff169085015260808181015163ffffffff169085015260a08181015160ff169085015260c08181015160ff169085015260e08181015161ffff16908501526101008181015163ffffffff16908501526101208181015161ffff16908501526101408181015161ffff1690850152610160818101516001600160e01b03191690850152610180818101511515908501526101a08181015161ffff16908501526101c08181015163ffffffff16908501526101e08181015163ffffffff16908501526102008181015167ffffffffffffffff16908501526102208181015163ffffffff1690850152015163ffffffff16910152565b3461022c57602060031936011261022c5761044b6112006111fb61115f61027d565b600061024061116c610747565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152826101c0820152826101e08201528261020082015282610220820152015267ffffffffffffffff166000526009602052604060002090565b612e98565b60405191829182611005565b359063ffffffff8216820361022c57565b359061ffff8216820361022c57565b81601f8201121561022c5780359061124382610cbb565b926112516040519485610715565b82845260208085019360061b8301019181831161022c57602001925b82841061127b575050505090565b60408483031261022c5760206040918251611295816106dd565b61129e876102ab565b8152828701356112ad8161021b565b8382015281520193019261126d565b3461022c57604060031936011261022c5760043567ffffffffffffffff811161022c573660238201121561022c5780600401356112f881610cbb565b916113066040519384610715565b8183526024602084019260051b8201019036821161022c5760248101925b828410611355576024358567ffffffffffffffff821161022c5761134f610d6092369060040161122c565b90612fee565b833567ffffffffffffffff811161022c57820160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc823603011261022c57604051906113a1826106dd565b6113ad602482016102ab565b8252604481013567ffffffffffffffff811161022c57602491010136601f8201121561022c5780356113de81610cbb565b916113ec6040519384610715565b818352602060e081850193028201019036821161022c57602001915b8183106114275750505091816020938480940152815201930192611324565b82360360e0811261022c5760c0601f1960405192611444846106dd565b863561144f8161021b565b8452011261022c5760e091602091604051611469816106f9565b61147484880161120c565b81526114826040880161120c565b848201526114926060880161121d565b60408201526114a36080880161120c565b60608201526114b460a0880161120c565b608082015260c08701356114c781610cd3565b60a082015283820152815201920191611408565b3461022c57600060031936011261022c576000546001600160a01b0381163303611562577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154913382841617600155166000556001600160a01b033391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f02b543c60000000000000000000000000000000000000000000000000000000060005260046000fd5b9080601f8301121561022c5781356115a381610cbb565b926115b16040519485610715565b81845260208085019260051b82010192831161022c57602001905b8282106115d95750505090565b6020809183356115e88161021b565b8152019101906115cc565b3461022c57604060031936011261022c5760043567ffffffffffffffff811161022c5761162490369060040161158c565b60243567ffffffffffffffff811161022c5761164490369060040161158c565b9061164d613fd8565b60005b81518110156116bc578061167161166c610ade600194866129ec565b615a24565b61167c575b01611650565b6001600160a01b03611691610ade83866129ec565b167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f91600080a2611676565b8260005b8151811015610d6057806116e16116dc610ade600194866129ec565b615a38565b6116ec575b016116c0565b6001600160a01b03611701610ade83866129ec565b167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba23600080a26116e6565b3461022c57604060031936011261022c5760043567ffffffffffffffff811161022c5761175d903690600401610b0f565b6024359167ffffffffffffffff831161022c576117b66117ae61179461178a6117be963690600401610b0f565b949095369161294b565b90604082015190605e604a84015160601c93015191929190565b91903361416a565b81019061329d565b60005b8151811015610d60576118096118046117eb6117dd84866129ec565b51516001600160a01b031690565b6001600160a01b03166000526007602052604060002090565b61335c565b61181d6118196040830151151590565b1590565b61197e57906118686118356020600194015160ff1690565b611862611856602061184786896129ec565b5101516001600160e01b031690565b6001600160e01b031690565b9061423c565b611883604061187784876129ec565b51015163ffffffff1690565b63ffffffff6118ae6118a561189e610ac56117dd888b6129ec565b5460e01c90565b63ffffffff1690565b911610611978576118fc6118c7604061187785886129ec565b6118ec6118d2610738565b6001600160e01b03851681529163ffffffff166020830152565b6109d0610ac56117dd86896129ec565b7f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a6001600160a01b036119326117dd85886129ec565b61196e6119446040611877888b6129ec565b60405193849316958390929163ffffffff6020916001600160e01b03604085019616845216910152565b0390a25b016117c1565b50611972565b6119c361198e6117dd84866129ec565b7f06439c6b000000000000000000000000000000000000000000000000000000006000526001600160a01b0316600452602490565b6000fd5b3461022c57604060031936011261022c5761044b611a4f6119e661027d565b67ffffffffffffffff602435916119fc8361021b565b600060a0604051611a0c816106f9565b828152826020820152826040820152826060820152826080820152015216600052600a6020526040600020906001600160a01b0316600052602052604060002090565b611acb611ac260405192611a62846106f9565b5463ffffffff8116845263ffffffff8160201c16602085015261ffff8160401c166040850152611aa9611a9c8263ffffffff9060501c1690565b63ffffffff166060860152565b63ffffffff607082901c16608085015260901c60ff1690565b151560a0830152565b6040519182918291909160a08060c083019463ffffffff815116845263ffffffff602082015116602085015261ffff604082015116604085015263ffffffff606082015116606085015263ffffffff608082015116608085015201511515910152565b60ff81160361022c57565b359061023c82611b2e565b3461022c57602060031936011261022c5760043567ffffffffffffffff811161022c573660238201121561022c57806004013590611b8182610cbb565b90611b8f6040519283610715565b82825260246102806020840194028201019036821161022c57602401925b818410611bbd57610d6083613392565b833603610280811261022c57610260601f1960405192611bdc846106dd565b611be5886102ab565b8452011261022c5761028091602091611bfc610747565b611c07848901610cdd565b8152611c156040890161121d565b84820152611c256060890161120c565b6040820152611c366080890161120c565b6060820152611c4760a0890161120c565b6080820152611c5860c08901611b39565b60a0820152611c6960e08901611b39565b60c0820152611c7b610100890161121d565b60e0820152611c8d610120890161120c565b610100820152611ca0610140890161121d565b610120820152611cb3610160890161121d565b610140820152611cc6610180890161044f565b610160820152611cd96101a08901610cdd565b610180820152611cec6101c0890161121d565b6101a0820152611cff6101e0890161120c565b6101c0820152611d12610200890161120c565b6101e0820152611d2561022089016102ab565b610200820152611d38610240890161120c565b610220820152611d4b610260890161120c565b61024082015283820152815201930192611bad565b3461022c57600060031936011261022c5760206001600160a01b0360015416604051908152f35b3461022c57602060031936011261022c5760043567ffffffffffffffff811161022c576040600319823603011261022c57604051611dc4816106dd565b816004013567ffffffffffffffff811161022c57611de8906004369185010161158c565b8152602482013567ffffffffffffffff811161022c57610d60926004611e11923692010161158c565b6020820152613616565b3461022c57602060031936011261022c5760043567ffffffffffffffff811161022c573660238201121561022c57806004013590611e5882610cbb565b90611e666040519283610715565b8282526024602083019360061b8201019036821161022c57602401925b818410611e9357610d6083613768565b60408436031261022c5760206040918251611ead816106dd565b8635611eb88161021b565b8152611ec58388016102ab565b83820152815201930192611e83565b3461022c57602060031936011261022c576001600160a01b03600435611ef98161021b565b611f01612c19565b5016600052600760205261044b604060002060ff60405191611f22836106a0565b546001600160a01b0381168352818160a01c16602084015260a81c16151560408201526040519182918291909160408060608301946001600160a01b03815116845260ff602082015116602085015201511515910152565b3461022c57600060031936011261022c57604051806020600b54918281520190600b6000527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db99060005b818110611fdb5761044b8561085a81870382610715565b8254845260209093019260019283019201611fc4565b3461022c57602060031936011261022c576040612013600435610f008161021b565b6120388251809263ffffffff602080926001600160e01b038151168552015116910152565bf35b3461022c57600060031936011261022c57602060405160128152f35b3461022c57604060031936011261022c5761206f61027d565b60243567ffffffffffffffff811161022c578060040160a0600319833603011261022c576120b46111fb8467ffffffffffffffff166000526009602052604060002090565b916120c26118198451151590565b61245157606481016120f86118196120d9836128b0565b6001600160a01b03166000526001600b01602052604060002054151590565b6124105783906044830161210c8186612c38565b95905061211a81858a614b75565b92612127610f68826128b0565b97889361214561213f61022084015163ffffffff1690565b8c615075565b9a6000808b156123d75750506121dd6121aa61ffff856121cf996121b69998966121ea9661218e6101c06121826101a06121f09d015161ffff1690565b95015163ffffffff1690565b6121a161219a8b6128b0565b938d612c38565b96909516615166565b989198979098946128b0565b6001600160a01b03166000526008602052604060002090565b5467ffffffffffffffff1690565b67ffffffffffffffff1690565b906127a6565b9560009761ffff61220761014089015161ffff1690565b16612379575b50946121ea6121dd6102006122df61044b9d6dffffffffffffffffffffffffffff6122d76122f79f9e9b6122d26001600160e01b039f9b9c6122ef9f6122d29e63ffffffff6122666122d29f60246122709501906128fa565b929050169061397c565b908b60a0810161229361228d612287835160ff1690565b60ff1690565b856127a6565b9360e08301916122a5835161ffff1690565b9061ffff82168311612307575b50505050608001516122d2916118a59163ffffffff166139ba565b6139ba565b61397c565b9116906127a6565b93015167ffffffffffffffff1690565b9116906127b9565b6040519081529081906020820190565b6118a59496506122d2959361ffff6123686123576122cd9661235161234a61234160809960ff61233b61236f9b5160ff1690565b16613989565b965161ffff1690565b61ffff1690565b90613837565b6121ea61228760c08d015160ff1690565b911661397c565b95938395506122b2565b9095949897508261239f8b989495986dffffffffffffffffffffffffffff9060701c1690565b6dffffffffffffffffffffffffffff16916123bd60248901856128fa565b90506123c9938861536b565b96979394389693929661220d565b959492509550506121ea6121dd6121cf6121b661240a6124056118a56102406121f099015163ffffffff1690565b612731565b946128b0565b61241c6119c3916128b0565b7f2502348c000000000000000000000000000000000000000000000000000000006000526001600160a01b0316600452602490565b7f99ac52f20000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff841660045260246000fd5b3461022c57602060031936011261022c576001600160a01b036004356124ae8161021b565b6124b6613fd8565b1633811461251b57807fffffffffffffffffffffffff000000000000000000000000000000000000000060005416176000556001600160a01b03600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b7fdad89dca0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461022c57602060031936011261022c5760043567ffffffffffffffff811161022c573660238201121561022c5780600401359061258282610cbb565b906125906040519283610715565b8282526024602083019360071b8201019036821161022c57602401925b8184106125bd57610d60836139d4565b8336036080811261022c576060601f19604051926125da846106dd565b87356125e58161021b565b8452011261022c576080916020916040516125ff816106a0565b8388013561260c8161021b565b8152604088013561261c81611b2e565b84820152606088013561262e81610cd3565b6040820152838201528152019301926125ad565b3461022c57604060031936011261022c5760043561265f8161021b565b612667610294565b9067ffffffffffffffff82169182600052600960205260ff60406000205416156126d4576126976126b892613b24565b92600052600960205263ffffffff60016040600020015460901c1690615075565b604080516001600160e01b039384168152919092166020820152f35b827f99ac52f20000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90662386f26fc10000820291808304662386f26fc10000149015171561275357565b612702565b908160051b918083046020149015171561275357565b9061012c82029180830461012c149015171561275357565b90655af3107a4000820291808304655af3107a4000149015171561275357565b8181029291811591840414171561275357565b81156127c3570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b61281c612816610b6f94936001600160e01b0361280f8195613b24565b16906127a6565b92613b24565b16906127b9565b9061282d82610cbb565b61283a6040519182610715565b828152601f1961284a8294610cbb565b019060005b82811061285b57505050565b80606060208093850101520161284f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156128ab5760061b0190565b61286c565b35610b6f8161021b565b91908110156128ab5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618136030182121561022c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561022c570180359067ffffffffffffffff821161022c5760200191813603831361022c57565b92919267ffffffffffffffff82116106bc5760405191612975601f8201601f191660200184610715565b82948184528183011161022c578281602093846000960137010152565b9061023c6040516129a2816106f9565b925463ffffffff8082168552602082811c821690860152604082811c61ffff1690860152605082901c81166060860152607082901c16608085015260901c60ff16151560a0840152565b80518210156128ab5760209160051b010190565b909291612a35612a248367ffffffffffffffff166000526009602052604060002090565b5460081b6001600160e01b03191690565b90612a3f81612823565b9560005b828110612a54575050505050505090565b612a67612a6282848961289b565b6128b0565b8388612a81612a778584846128ba565b60408101906128fa565b905060208111612b9e575b508392612ac2612abc612ab5612aab600198612afd97612af8976128ba565b60208101906128fa565b369161294b565b89613b9c565b612ae08967ffffffffffffffff16600052600a602052604060002090565b906001600160a01b0316600052602052604060002090565b612992565b60a081015115612b6257612b46612b1e6060612b3893015163ffffffff1690565b6040805163ffffffff909216602083015290928391820190565b03601f198101835282610715565b612b50828b6129ec565b52612b5b818a6129ec565b5001612a43565b50612b38612b46612b9984612b8b8a67ffffffffffffffff166000526009602052604060002090565b015460101c63ffffffff1690565b612b1e565b915050612bd66118a5612bc984612ae08b67ffffffffffffffff16600052600a602052604060002090565b5460701c63ffffffff1690565b10612be357838838612a8c565b7f36f536ca000000000000000000000000000000000000000000000000000000006000526001600160a01b031660045260246000fd5b60405190612c26826106a0565b60006040838281528260208201520152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561022c570180359067ffffffffffffffff821161022c57602001918160061b3603831361022c57565b35906001600160e01b038216820361022c57565b60408136031261022c57612ccf602060405192612cbc846106dd565b8035612cc78161021b565b845201612c8c565b602082015290565b60408136031261022c57612ccf602060405192612cf3846106dd565b612cc7816102ab565b90612d05613fd8565b60005b8251811015612e555780612d1e600192856129ec565b517f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a360a06001600160a01b038351169260608101936001600160a01b0380865116957fffff000000000000000000000000000000000000000000000000000000000000612dbc60208601947fffffffffffffffffffff00000000000000000000000000000000000000000000865116604088019a848c5116926159a0565b977fffffffffffffffffffff000000000000000000000000000000000000000000006080870195612e28875115158c600052600460205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b8560405198511688525116602087015251166040850152511660608301525115156080820152a201612d08565b509050565b60405190612e67826106dd565b60006020838281520152565b90604051612e80816106dd565b91546001600160e01b038116835260e01c6020830152565b9061023c612fe06001612ea9610747565b94612f7f612f758254612ec5612ebf8260ff1690565b15158a52565b61ffff600882901c1660208a015263ffffffff601882901c1660408a015263ffffffff603882901c1660608a015263ffffffff605882901c1660808a015260ff607882901c1660a08a015260ff608082901c1660c08a015261ffff608882901c1660e08a015263ffffffff609882901c166101008a015261ffff60b882901c166101208a015261ffff60c882901c166101408a01526001600160e01b0319600882901b166101608a015260f81c90565b1515610180880152565b015461ffff81166101a086015263ffffffff601082901c166101c086015263ffffffff603082901c166101e086015267ffffffffffffffff605082901c1661020086015263ffffffff609082901c1661022086015260b01c63ffffffff1690565b63ffffffff16610240840152565b90612ff7613fd8565b6000915b80518310156131e95761300e83826129ec565b5190613022825167ffffffffffffffff1690565b946020600093019367ffffffffffffffff8716935b855180518210156131d45761304e826020926129ec565b51015161305f6117dd8389516129ec565b8151602083015163ffffffff90811691168181101561319b575050608082015163ffffffff166020811061315a575090867f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b56001600160a01b03846130e9858f60019998612ae06130e49267ffffffffffffffff16600052600a602052604060002090565b614016565b61315160405192839216958291909160a08060c083019463ffffffff815116845263ffffffff602082015116602085015261ffff604082015116604085015263ffffffff606082015116606085015263ffffffff608082015116608085015201511515910152565b0390a301613037565b7f24ecdc02000000000000000000000000000000000000000000000000000000006000526001600160a01b0390911660045263ffffffff1660245260446000fd5b7f0b4f67a20000000000000000000000000000000000000000000000000000000060005263ffffffff9081166004521660245260446000fd5b50509550925092600191500191929092612ffb565b50905060005b81518110156132995780613217613208600193856129ec565b515167ffffffffffffffff1690565b67ffffffffffffffff6001600160a01b03613246602061323786896129ec565b5101516001600160a01b031690565b600061326a82612ae08767ffffffffffffffff16600052600a602052604060002090565b551691167f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b600080a3016131ef565b5050565b60208183031261022c5780359067ffffffffffffffff821161022c570181601f8201121561022c578035906132d182610cbb565b926132df6040519485610715565b8284526020606081860194028301019181831161022c57602001925b828410613309575050505090565b60608483031261022c576020606091604051613324816106a0565b863561332f8161021b565b815261333c838801612c8c565b8382015261334c6040880161120c565b60408201528152019301926132fb565b90604051613369816106a0565b604060ff8294546001600160a01b0381168452818160a01c16602085015260a81c161515910152565b9061339b613fd8565b60005b8251811015612e55576133b181846129ec565b5160206133c161320884876129ec565b9101519067ffffffffffffffff8116801580156135f7575b80156135c9575b80156134ea575b6134b25791613478826001959461342861341b612a2461347d9767ffffffffffffffff166000526009602052604060002090565b6001600160e01b03191690565b613483577f71e9302ab4e912a9678ae7f5a8542856706806f2817e1bf2a20b171e265cb4ad6040518061345b8782611005565b0390a267ffffffffffffffff166000526009602052604060002090565b614349565b0161339e565b7f2431cc0363f2f66b21782c7e3d54dd9085927981a21bd0cc6be45a51b19689e36040518061345b8782611005565b7fc35aa79d0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff821660045260246000fd5b506001600160e01b031961350a6101608501516001600160e01b03191690565b167f2812d52c00000000000000000000000000000000000000000000000000000000811415908161359e575b81613573575b81613548575b506133e7565b7fc4e05953000000000000000000000000000000000000000000000000000000009150141538613542565b7fac77ffec00000000000000000000000000000000000000000000000000000000811415915061353c565b7f1e10bdc4000000000000000000000000000000000000000000000000000000008114159150613536565b506101e083015163ffffffff1663ffffffff6135ef6118a5606087015163ffffffff1690565b9116116133e0565b5063ffffffff61360f6101e085015163ffffffff1690565b16156133d9565b61361e613fd8565b60208101519160005b83518110156136ab5780613640610ade600193876129ec565b61366261365d6001600160a01b0383165b6001600160a01b031690565b615cd3565b61366e575b5001613627565b6040516001600160a01b039190911681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda7758090602090a138613667565b5091505160005b8151811015613299576136c8610ade82846129ec565b906001600160a01b0382161561373e577feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef6137358361371a6137156136516001976001600160a01b031690565b615c5a565b506040516001600160a01b0390911681529081906020820190565b0390a1016136b2565b7f8579befe0000000000000000000000000000000000000000000000000000000060005260046000fd5b613770613fd8565b60005b815181101561329957806001600160a01b03613791600193856129ec565b5151167fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d61382e67ffffffffffffffff60206137cd86896129ec565b51015116836000526008602052604060002067ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790556040519182918291909167ffffffffffffffff6020820193169052565b0390a201613773565b9190820391821161275357565b61384c612e5a565b5061387261386d826001600160a01b03166000526006602052604060002090565b612e73565b602081019161389161388b6118a5855163ffffffff1690565b42613837565b63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001611613939576118046138dd916001600160a01b03166000526007602052604060002090565b6138ed6118196040830151151590565b801561393f575b61393957613901906149ff565b9163ffffffff6139296118a561391e602087015163ffffffff1690565b935163ffffffff1690565b911610613934575090565b905090565b50905090565b506001600160a01b0361395982516001600160a01b031690565b16156138f4565b906002820180921161275357565b906020820180921161275357565b9190820180921161275357565b9061ffff8091169116029061ffff821691820361275357565b63ffffffff60209116019063ffffffff821161275357565b9063ffffffff8091169116019063ffffffff821161275357565b906139dd613fd8565b60005b8251811015612e5557806139f6600192856129ec565b517fe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf613b1b60206001600160a01b038451169301518360005260076020526040600020613a7b6001600160a01b0383511682906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b602082015181547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000075ff0000000000000000000000000000000000000000006040870151151560a81b169360a01b169116171790556040519182918291909160408060608301946001600160a01b03815116845260ff602082015116602085015201511515910152565b0390a2016139e0565b613b2d81613844565b9063ffffffff602083015116158015613b8a575b613b535750516001600160e01b031690565b6001600160a01b03907f06439c6b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b506001600160e01b0382511615613b41565b6001600160e01b03191691907f2812d52c000000000000000000000000000000000000000000000000000000008314613c94577f1e10bdc4000000000000000000000000000000000000000000000000000000008314613c86577fac77ffec0000000000000000000000000000000000000000000000000000000083148015613c5d575b613c5257827f2ee820750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61023c91925061549e565b507fc4e05953000000000000000000000000000000000000000000000000000000008314613c20565b61023c919250600190615501565b61023c91925061541f565b6001600160e01b03191692917f2812d52c000000000000000000000000000000000000000000000000000000008414613d76577f1e10bdc4000000000000000000000000000000000000000000000000000000008414613d5557507fac77ffec0000000000000000000000000000000000000000000000000000000083148015613c5d57613c5257827f2ee820750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b91925061023c9115613d6d5760ff60015b1690615501565b60ff6000613d66565b5061023c91925061541f565b33600052600360205260406000205415613d9857565b7fd86ad9cf000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b6111fb613ded9196949395929667ffffffffffffffff166000526009602052604060002090565b946101608601946001600160e01b0319613e0f87516001600160e01b03191690565b167f2812d52c000000000000000000000000000000000000000000000000000000008114908115613fae575b8115613f84575b50613f3f5750507f1e10bdc4000000000000000000000000000000000000000000000000000000006001600160e01b0319613e8586516001600160e01b03191690565b1614613ed6576119c3613ea085516001600160e01b03191690565b7f2ee82075000000000000000000000000000000000000000000000000000000006000526001600160e01b031916600452602490565b613f2a9350612ab56060613f148763ffffffff613f0b610180613f0386613f389b9d015163ffffffff1690565b930151151590565b91168587615853565b0151604051958691602083019190602083019252565b03601f198101865285610715565b9160019190565b94509491613f6591613f5f6118a56101e0610b6f96015163ffffffff1690565b916155ec565b93613f7c6020613f74876156f5565b960151151590565b93369161294b565b7fc4e059530000000000000000000000000000000000000000000000000000000091501438613e42565b7fac77ffec0000000000000000000000000000000000000000000000000000000081149150613e3b565b6001600160a01b03600154163303613fec57565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b815181546020808501516040808701517fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941663ffffffff958616179190921b67ffffffff00000000161791901b69ffff000000000000000016178255606083015161023c936141269260a0926140c8911685547fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff1660509190911b6dffffffff0000000000000000000016178555565b61411f6140dc608083015163ffffffff1690565b85547fffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffff1660709190911b71ffffffff000000000000000000000000000016178555565b0151151590565b81547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1690151560901b72ff00000000000000000000000000000000000016179055565b9192909261417a828286866159a0565b600052600460205260ff60406000205416156141965750505050565b6040517f097e17ff0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529390921660248401527fffffffffffffffffffff0000000000000000000000000000000000000000000090911660448301527fffff000000000000000000000000000000000000000000000000000000000000166064820152608490fd5b0390fd5b604d811161275357600a0a90565b60ff1660120160ff81116127535760ff169060248211156142d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82019182116127535761428d6142939261422e565b906127b9565b6001600160e01b0381116142ad576001600160e01b031690565b7f10cb51d10000000000000000000000000000000000000000000000000000000060005260046000fd5b906024039060248211612753576121ea6142f09261422e565b614293565b9060ff80911691160160ff81116127535760ff169060248211156142d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82019182116127535761428d6142939261422e565b9061494b610240600161023c946143946143638651151590565b829060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b6143da6143a6602087015161ffff1690565b82547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff1660089190911b62ffff0016178255565b6144266143ee604087015163ffffffff1690565b82547fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff1660189190911b66ffffffff00000016178255565b61447661443a606087015163ffffffff1690565b82547fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff1660389190911b6affffffff0000000000000016178255565b6144ca61448a608087015163ffffffff1690565b82547fffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffff1660589190911b6effffffff000000000000000000000016178255565b61451c6144db60a087015160ff1690565b82547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1660789190911b6fff00000000000000000000000000000016178255565b61456f61452d60c087015160ff1690565b82547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff1660809190911b70ff0000000000000000000000000000000016178255565b6145c561458160e087015161ffff1690565b82547fffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff1660889190911b72ffff000000000000000000000000000000000016178255565b6146226145da61010087015163ffffffff1690565b82547fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff1660989190911b76ffffffff0000000000000000000000000000000000000016178255565b61467f61463561012087015161ffff1690565b82547fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff1660b89190911b78ffff000000000000000000000000000000000000000000000016178255565b6146de61469261014087015161ffff1690565b82547fffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff1660c89190911b7affff0000000000000000000000000000000000000000000000000016178255565b6147476146f76101608701516001600160e01b03191690565b82547fff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff1660089190911c7effffffff00000000000000000000000000000000000000000000000000000016178255565b6147a8614758610180870151151590565b82547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016178255565b01926147ec6147bd6101a083015161ffff1690565b859061ffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000825416179055565b6148386148016101c083015163ffffffff1690565b85547fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff1660109190911b65ffffffff000016178555565b61488861484d6101e083015163ffffffff1690565b85547fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1660309190911b69ffffffff00000000000016178555565b6148e46148a161020083015167ffffffffffffffff1690565b85547fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff1660509190911b71ffffffffffffffff0000000000000000000016178555565b6149406148f961022083015163ffffffff1690565b85547fffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff1660909190911b75ffffffff00000000000000000000000000000000000016178555565b015163ffffffff1690565b7fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff79ffffffff0000000000000000000000000000000000000000000083549260b01b169116179055565b519069ffffffffffffffffffff8216820361022c57565b908160a091031261022c576149c081614995565b91602082015191604081015191610b6f608060608401519301614995565b6040513d6000823e3d90fd5b9081602091031261022c5751610b6f81611b2e565b614a07612e5a565b50614a1f61365161365183516001600160a01b031690565b90604051907ffeaf968c00000000000000000000000000000000000000000000000000000000825260a082600481865afa928315614b2757600092600094614b2c575b50600083126142ad576020600491604051928380927f313ce5670000000000000000000000000000000000000000000000000000000082525afa928315614b2757610b6f9363ffffffff93614ac893600092614af1575b506020015160ff165b906142f5565b92614ae3614ad4610738565b6001600160e01b039095168552565b1663ffffffff166020830152565b614ac2919250614b18602091823d8411614b20575b614b108183610715565b8101906149ea565b929150614ab9565b503d614b06565b6149de565b909350614b5291925060a03d60a011614b5f575b614b4a8183610715565b8101906149ac565b5093925050919238614a62565b503d614b40565b9081602091031261022c573590565b9190614b8460208301836128fa565b93905060408301614b958185612c38565b90506040840191614bad6118a5845163ffffffff1690565b8088116150435750602085015161ffff1680831161500d5750610160850196614bde88516001600160e01b03191690565b6001600160e01b031981167f2812d52c0000000000000000000000000000000000000000000000000000000081148015614fe4575b8015614fbb575b15614c9557505050505050509181614c8f612ab5614c76614c8896614c456080610b6f9801866128fa565b6101e083015163ffffffff169063ffffffff614c6e610180613f74606088015163ffffffff1690565b941692615a4c565b51958694516001600160e01b03191690565b92806128fa565b90613c9f565b7f1e10bdc400000000000000000000000000000000000000000000000000000000909a99929394969895979a14600014614f845750614d3e614d0e614d31999a614ce260808801886128fa565b63ffffffff614d06610180614cfe606087015163ffffffff1690565b950151151590565b931691615853565b91614d206118a5845163ffffffff1690565b998a91516001600160e01b03191690565b614c8f612ab588806128fa565b6080810151519082614d5b614d5387806128fa565b810190614b66565b614f67575081614f31575b85151580614f25575b614efb5760408211614ec7576020015167ffffffffffffffff9081169081831c16614e8d575050614dad90614da7859493979561276e565b9061397c565b946000935b838510614e0b5750505050506118a5614dcf915163ffffffff1690565b808211614ddb57505090565b7f869337890000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b9091929395600190614e626118a5612bc9614e3a8667ffffffffffffffff16600052600a602052604060002090565b614e4b612a628d6109278b8d612c38565b6001600160a01b0316600052602052604060002090565b8015614e7d57614e719161397c565b965b0193929190614db2565b50614e879061396e565b96614e73565b7fafa933080000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260245260446000fd5b7f8a0d71f7000000000000000000000000000000000000000000000000000000006000526004829052604060245260446000fd5b7f5bed51920000000000000000000000000000000000000000000000000000000060005260046000fd5b50606081015115614d6f565b6119c3827f8a0d71f700000000000000000000000000000000000000000000000000000000600052906044916004526000602452565b614f7e919350614da7614f7984613960565b612758565b91614d66565b7f2ee82075000000000000000000000000000000000000000000000000000000006000526001600160e01b03191660045260246000fd5b507fc4e05953000000000000000000000000000000000000000000000000000000008114614c1a565b507fac77ffec000000000000000000000000000000000000000000000000000000008114614c13565b7fd88dddd600000000000000000000000000000000000000000000000000000000600052600483905261ffff1660245260446000fd5b7f8693378900000000000000000000000000000000000000000000000000000000600052600452602487905260446000fd5b67ffffffffffffffff811660005260056020526040600020916040519261509b846106dd565b546001600160e01b038116845260e01c9182602085015263ffffffff821692836150d5575b50505050610b6f90516001600160e01b031690565b63ffffffff1642908103939084116127535783116150f357806150c0565b7ff08bcb3e0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045263ffffffff1660245260445260646000fd5b60408136031261022c5760206040519161514f836106dd565b803561515a8161021b565b83520135602082015290565b9694919695929390956000946000986000986000965b808810615190575050505050505050929190565b9091929394959697999a6151ad6151a88a848b61289b565b615136565b9a6151e4612af88d614e4b6151d68967ffffffffffffffff16600052600a602052604060002090565b91516001600160a01b031690565b916151f561181960a0850151151590565b61533e5760009c604084019061521061234a835161ffff1690565b6152c6575b5050606083015163ffffffff1661522b916139ba565b9c608083015161523e9063ffffffff1690565b615247916139ba565b9b82516152579063ffffffff1690565b63ffffffff1661526690612731565b600193908083106152ba57506124056118a5602061528993015163ffffffff1690565b8082116152a9575061529a9161397c565b985b019695949392919061517c565b90506152b49161397c565b9861529c565b9150506152b49161397c565b906121ea61532f939f61531d6153269460208f8e61234a95506001600160a01b036152f885516001600160a01b031690565b91166001600160a01b03821614615337576153139150613b24565b915b015190615ab4565b925161ffff1690565b620186a0900490565b9b3880615215565b5091615315565b999b506001915061535f8461535961536593614da78b612731565b9b6139ba565b9c6139a2565b9a61529c565b91939093806101e00193846101e011612753576101208102908082046101201490151715612753576101e09101018093116127535761234a610140615401610b6f966dffffffffffffffffffffffffffff6122d76153ec6153d961540b9a63ffffffff6121ea9a169061397c565b6121ea61234a6101208c015161ffff1690565b614da76118a56101008b015163ffffffff1690565b93015161ffff1690565b612786565b9081602091031261022c575190565b60208151036154555761543b6020825183010160208301615410565b6001600160a01b038111908115615492575b506154555750565b61422a906040519182917f8d666f6000000000000000000000000000000000000000000000000000000000835260206004840181815201906102f1565b6104009150103861544d565b60208151036154c457600b6154bc6020835184010160208401615410565b106154c45750565b61422a906040519182917fe0d7fb0200000000000000000000000000000000000000000000000000000000835260206004840181815201906102f1565b9060208251036155275780615514575050565b6154bc6020835184010160208401615410565b6040517fe0d7fb02000000000000000000000000000000000000000000000000000000008152602060048201528061422a60248201856102f1565b919091356001600160e01b03198116926004811061557e575050565b6001600160e01b0319929350829060040360031b1b161690565b909291928360041161022c57831161022c57600401916003190190565b9060041161022c5790600490565b9081604091031261022c576020604051916155dd836106dd565b805183520151612ccf81610cd3565b916155f5612e5a565b5081156156d3575061561e612ab582806156186001600160e01b03199587615562565b95615598565b91167f181dcf1000000000000000000000000000000000000000000000000000000000810361565b575080602080610b6f935183010191016155c3565b7f97a657c900000000000000000000000000000000000000000000000000000000146156ab577f5247fdce0000000000000000000000000000000000000000000000000000000060005260046000fd5b806020806156be93518301019101615410565b6156c6610738565b9081526000602082015290565b91505067ffffffffffffffff6156e7610738565b911681526000602082015290565b6020604051917f181dcf1000000000000000000000000000000000000000000000000000000000828401528051602484015201511515604482015260448152610b6f606482610715565b6040519061574c826106c1565b60606080836000815260006020820152600060408201526000838201520152565b60208183031261022c5780359067ffffffffffffffff821161022c57019060a08282031261022c57604051916157a2836106c1565b6157ab8161120c565b83526157b9602082016102ab565b602084015260408101356157cc81610cd3565b60408401526060810135606084015260808101359067ffffffffffffffff821161022c57019080601f8301121561022c57813561580881610cbb565b926158166040519485610715565b81845260208085019260051b82010192831161022c57602001905b82821061584357505050608082015290565b8135815260209182019101615831565b61585b61573f565b508115615976577f1f3b3aba000000000000000000000000000000000000000000000000000000006001600160e01b031961589f61589985856155b5565b90615562565b160361594c57816158bb926158b392615598565b81019061576d565b9180615936575b61590c5763ffffffff6158d9835163ffffffff1690565b16116158e25790565b7f2e2b0c290000000000000000000000000000000000000000000000000000000060005260046000fd5b7fee433e990000000000000000000000000000000000000000000000000000000060005260046000fd5b506159476118196040840151151590565b6158c2565b7f5247fdce0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fb00b53dc0000000000000000000000000000000000000000000000000000000060005260046000fd5b604080516001600160a01b039283166020820190815292909316908301527fffffffffffffffffffff0000000000000000000000000000000000000000000090921660608201527fffff000000000000000000000000000000000000000000000000000000000000909216608083015290615a1e8160a08101612b38565b51902090565b6001600160a01b03610b6f9116600b615b61565b6001600160a01b03610b6f9116600b615c95565b9063ffffffff615a6993959495615a61612e5a565b5016916155ec565b91825111615a8a5780615a7e575b61590c5790565b50602081015115615a77565b7f4c4fc93a0000000000000000000000000000000000000000000000000000000060005260046000fd5b670de0b6b3a7640000916001600160e01b03615ad092166127a6565b0490565b80548210156128ab5760005260206000200190600090565b91615b06918354906000199060031b92831b921b19161790565b9055565b80548015615b32576000190190615b218282615ad4565b60001982549160031b1b1916905555565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001810191806000528260205260406000205492831515600014615c13576000198401848111612753578354936000198501948511612753576000958583615bc497615bb59503615bca575b505050615b0a565b90600052602052604060002090565b55600190565b615bfa615bf491615beb615be1615c0a9588615ad4565b90549060031b1c90565b92839187615ad4565b90615aec565b8590600052602052604060002090565b55388080615bad565b50505050600090565b805490680100000000000000008210156106bc5781615c43916001615b0694018155615ad4565b81939154906000199060031b92831b921b19161790565b600081815260036020526040902054615c8f57615c78816002615c1c565b600254906000526003602052604060002055600190565b50600090565b6000828152600182016020526040902054615ccc5780615cb783600193615c1c565b80549260005201602052604060002055600190565b5050600090565b600081815260036020526040902054908115615ccc5760001982019082821161275357600254926000198401938411612753578383615bc49460009603615d33575b505050615d226002615b0a565b600390600052602052604060002090565b615d22615bf491615d4b615be1615d55956002615ad4565b9283916002615ad4565b55388080615d1556fea164736f6c634300081a000a" type FeeQuoterContract struct { @@ -169,16 +169,16 @@ type DestChainConfigArgs struct { DestChainConfig DestChainConfig } +type FeeTokenArgs struct { + Token common.Address + PremiumMultiplierWeiPerEth uint64 +} + type GasPriceUpdate struct { DestChainSelector uint64 UsdPerUnitGas *big.Int } -type PremiumMultiplierWeiPerEthArgs struct { - Token common.Address - PremiumMultiplierWeiPerEth uint64 -} - type PriceUpdates struct { TokenPriceUpdates []TokenPriceUpdate GasPriceUpdates []GasPriceUpdate @@ -251,7 +251,7 @@ type ConstructorArgs struct { FeeTokens []common.Address TokenPriceFeeds []TokenPriceFeedUpdate TokenTransferFeeConfigArgs []TokenTransferFeeConfigArgs - PremiumMultiplierWeiPerEthArgs []PremiumMultiplierWeiPerEthArgs + PremiumMultiplierWeiPerEthArgs []FeeTokenArgs DestChainConfigArgs []DestChainConfigArgs } diff --git a/chains/evm/gobindings/generated/latest/offramp/offramp.go b/chains/evm/gobindings/generated/latest/offramp/offramp.go index 45f6a4ec39..3d018b39b0 100644 --- a/chains/evm/gobindings/generated/latest/offramp/offramp.go +++ b/chains/evm/gobindings/generated/latest/offramp/offramp.go @@ -80,7 +80,7 @@ type OffRampStaticConfig struct { } var OffRampMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"struct OffRamp.StaticConfig\",\"components\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGasBufferToUpdateState\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applySourceChainConfigUpdates\",\"inputs\":[{\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\",\"internalType\":\"struct OffRamp.SourceChainConfigArgs[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"encodedMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"ccvs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"verifierResults\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"gasLimitOverride\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeSingleMessage\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"struct MessageV1Codec.MessageV1\",\"components\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"executionGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"ccipReceiveGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"finality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"ccvAndExecutorHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"onRampAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offRampAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destBlob\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenTransfer\",\"type\":\"tuple[]\",\"internalType\":\"struct MessageV1Codec.TokenTransferV1[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourceTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenReceiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"ccvs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"verifierResults\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"gasLimitOverride\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllSourceChainConfigs\",\"inputs\":[],\"outputs\":[{\"name\":\"sourceChainSelectors\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\",\"internalType\":\"struct OffRamp.SourceChainConfig[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCCVsForMessage\",\"inputs\":[{\"name\":\"encodedMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"optionalCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"threshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExecutionState\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enum Internal.MessageExecutionState\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSourceChainConfig\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct OffRamp.SourceChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct OffRamp.StaticConfig\",\"components\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGasBufferToUpdateState\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ExecutionStateChanged\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"state\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enum Internal.MessageExecutionState\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SourceChainConfigSet\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sourceConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OffRamp.SourceChainConfigArgs\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OffRamp.StaticConfig\",\"components\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMNRemote\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGasBufferToUpdateState\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CanOnlySelfCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DuplicateCCVNotAllowed\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"GasCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InboundImplementationNotFound\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"verifierResults\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InsufficientGasToCompleteTx\",\"inputs\":[{\"name\":\"err\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"location\",\"type\":\"uint8\",\"internalType\":\"enum MessageV1Codec.EncodingErrorLocation\"}]},{\"type\":\"error\",\"name\":\"InvalidEVMAddress\",\"inputs\":[{\"name\":\"encodedAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidEncodingVersion\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidGasLimitOverride\",\"inputs\":[{\"name\":\"messageGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"gasLimitOverride\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageDestChainSelector\",\"inputs\":[{\"name\":\"messageDestChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNumberOfTokens\",\"inputs\":[{\"name\":\"numTokens\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidOffRamp\",\"inputs\":[{\"name\":\"expected\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"got\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidOnRamp\",\"inputs\":[{\"name\":\"got\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidOptionalThreshold\",\"inputs\":[{\"name\":\"wanted\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRequestedFinality\",\"inputs\":[{\"name\":\"requestedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"allowedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"InvalidVerifierResultsLength\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustSpecifyDefaultOrRequiredCCVs\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoStateProgressMade\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotACompatiblePool\",\"inputs\":[{\"name\":\"notPool\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OptionalCCVQuorumNotReached\",\"inputs\":[{\"name\":\"wanted\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReceiverError\",\"inputs\":[{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RequestedFinalityCanOnlyHaveOneMode\",\"inputs\":[{\"name\":\"encodedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"RequiredCCVMissing\",\"inputs\":[{\"name\":\"requiredCCV\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"SkippedAlreadyExecutedMessage\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"SourceChainNotEnabled\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"TokenHandlingError\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroChainSelectorNotAllowed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"struct OffRamp.StaticConfig\",\"components\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMN\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGasBufferToUpdateState\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applySourceChainConfigUpdates\",\"inputs\":[{\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\",\"internalType\":\"struct OffRamp.SourceChainConfigArgs[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"encodedMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"ccvs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"verifierResults\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"gasLimitOverride\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeSingleMessage\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"struct MessageV1Codec.MessageV1\",\"components\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"executionGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"ccipReceiveGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"finality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"ccvAndExecutorHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"onRampAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offRampAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destBlob\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenTransfer\",\"type\":\"tuple[]\",\"internalType\":\"struct MessageV1Codec.TokenTransferV1[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourceTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenReceiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"ccvs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"verifierResults\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"gasLimitOverride\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllSourceChainConfigs\",\"inputs\":[],\"outputs\":[{\"name\":\"sourceChainSelectors\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\",\"internalType\":\"struct OffRamp.SourceChainConfig[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCCVsForMessage\",\"inputs\":[{\"name\":\"encodedMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"optionalCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"threshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExecutionState\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enum Internal.MessageExecutionState\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSourceChainConfig\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct OffRamp.SourceChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct OffRamp.StaticConfig\",\"components\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMN\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGasBufferToUpdateState\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ExecutionStateChanged\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"state\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enum Internal.MessageExecutionState\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SourceChainConfigSet\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sourceConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OffRamp.SourceChainConfigArgs\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onRamps\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OffRamp.StaticConfig\",\"components\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMN\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGasBufferToUpdateState\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CanOnlySelfCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DuplicateCCVNotAllowed\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"GasCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InboundImplementationNotFound\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"verifierResults\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InsufficientGasToCompleteTx\",\"inputs\":[{\"name\":\"err\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"location\",\"type\":\"uint8\",\"internalType\":\"enum MessageV1Codec.EncodingErrorLocation\"}]},{\"type\":\"error\",\"name\":\"InvalidEVMAddress\",\"inputs\":[{\"name\":\"encodedAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidEncodingVersion\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidGasLimitOverride\",\"inputs\":[{\"name\":\"messageGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"gasLimitOverride\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageDestChainSelector\",\"inputs\":[{\"name\":\"messageDestChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNumberOfTokens\",\"inputs\":[{\"name\":\"numTokens\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidOffRamp\",\"inputs\":[{\"name\":\"expected\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"got\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidOnRamp\",\"inputs\":[{\"name\":\"got\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidOptionalThreshold\",\"inputs\":[{\"name\":\"wanted\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRequestedFinality\",\"inputs\":[{\"name\":\"requestedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"allowedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"InvalidVerifierResultsLength\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustSpecifyDefaultOrRequiredCCVs\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoStateProgressMade\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotACompatiblePool\",\"inputs\":[{\"name\":\"notPool\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OptionalCCVQuorumNotReached\",\"inputs\":[{\"name\":\"wanted\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"got\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReceiverError\",\"inputs\":[{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RequestedFinalityCanOnlyHaveOneMode\",\"inputs\":[{\"name\":\"encodedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"RequiredCCVMissing\",\"inputs\":[{\"name\":\"requiredCCV\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"SkippedAlreadyExecutedMessage\",\"inputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"SourceChainNotEnabled\",\"inputs\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"TokenHandlingError\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"err\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroChainSelectorNotAllowed\",\"inputs\":[]}]", Bin: "0x610120604052346102af57604051601f61618838819003918201601f19168301916001600160401b038311848410176102b45780849260a0946040528339810103126102af576040519060009060a083016001600160401b0381118482101761029b5760405280516001600160401b0381168103610297578352602081015161ffff8116810361029757602084019081526040820151906001600160a01b038216820361029357604085019182526060830151926001600160a01b038416840361028f5760608601938452608001519363ffffffff8516850361028c5760808601948552331561027d57600180546001600160a01b0319163317905582516001600160a01b031615801561026b575b61025c5785516001600160401b03161561024d5761ffff8251161561023e5763ffffffff8551161561023e5785516001600160401b03908116608090815284516001600160a01b0390811660a09081528751821660c052855161ffff90811660e052895163ffffffff90811661010052604080518d519097168752885190921660208701528851841691860191909152885190921660608501528851909116918301919091527f6db4162777b6c980e778bb05a3d9e050f3792b091287ff0d4f3d51bdcd7427db91a1604051615ebd90816102cb823960805181818161013e01526119da015260a0518181816101a10152611901015260c0518181816101dd01528181614b860152615627015260e05181818161016501526150ba01526101005181818161020901526142e70152f35b632855a4d960e11b8152600490fd5b63c656089560e01b8152600490fd5b6342bcdf7f60e11b8152600490fd5b5083516001600160a01b03161561010e565b639b15e16f60e01b8152600490fd5b80fd5b8480fd5b8380fd5b8280fd5b634e487b7160e01b83526041600452602483fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c806306285c69146100d7578063181f5a77146100d257806320f81c88146100cd5780633b81ab9b146100c857806349d8033e146100c35780635215505b146100be5780635643a782146100b957806379ba5097146100b45780638da5cb5b146100af578063d6162963146100aa578063e9d68a8e146100a55763f2fde38b146100a057600080fd5b61115f565b610f9b565b610eda565b610ea6565b610ddb565b610a1e565b610907565b610768565b61068f565b61051b565b610411565b6100ec565b60009103126100e757565b600080fd5b346100e75760006003193601126100e7576000608060405161010d816102dc565b82815282602082015282604082015282606082015201526102a9604051610133816102dc565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815261ffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016606082015263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016608082015260405191829182919091608063ffffffff8160a084019567ffffffffffffffff815116855261ffff602082015116602086015273ffffffffffffffffffffffffffffffffffffffff604082015116604086015273ffffffffffffffffffffffffffffffffffffffff6060820151166060860152015116910152565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff8211176102f857604052565b6102ad565b6101c0810190811067ffffffffffffffff8211176102f857604052565b6020810190811067ffffffffffffffff8211176102f857604052565b90601f601f19910116810190811067ffffffffffffffff8211176102f857604052565b6040519061036860c083610336565b565b6040519061036860a083610336565b6040519061036861010083610336565b60405190610368604083610336565b67ffffffffffffffff81116102f857601f01601f191660200190565b604051906103c3602083610336565b60008252565b60005b8381106103dc5750506000910152565b81810151838201526020016103cc565b90601f19601f60209361040a815180928187528780880191016103c9565b0116010190565b346100e75760006003193601126100e7576102a960408051906104348183610336565b600d82527f4f666652616d7020322e302e30000000000000000000000000000000000000006020830152519182916020835260208301906103ec565b9181601f840112156100e75782359167ffffffffffffffff83116100e757602083818601950101116100e757565b906020808351928381520192019060005b8181106104bc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016104af565b9161051460ff9161050660409497969760608752606087019061049e565b90858203602087015261049e565b9416910152565b346100e75760206003193601126100e75760043567ffffffffffffffff81116100e75761054f610555913690600401610470565b906137d2565b61014081018051601481510361060b576102a96105fc846105768551611246565b60601c9061058c815167ffffffffffffffff1690565b91610120820151610180830151916105f6816105cb60a08701517fffffffff000000000000000000000000000000000000000000000000000000001690565b956105f06105e760806101a08401515193015163ffffffff1690565b63ffffffff1690565b90613cff565b94613e7d565b604093919351938493846104e8565b610641906040519182917f8d666f6000000000000000000000000000000000000000000000000000000000835260048301611235565b0390fd5b9181601f840112156100e75782359167ffffffffffffffff83116100e7576020808501948460051b0101116100e757565b63ffffffff8116036100e757565b359061036882610676565b346100e75760806003193601126100e75760043567ffffffffffffffff81116100e7576106c0903690600401610470565b9060243567ffffffffffffffff81116100e7576106e1903690600401610645565b926044359367ffffffffffffffff85116100e75761070661071b953690600401610645565b9390926064359561071687610676565b6117e8565b005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004111561075657565b61071d565b9060048210156107565752565b346100e75760206003193601126100e7576004356000526006602052602060ff6040600020541661079c604051809261075b565bf35b9080602083519182815201916020808360051b8301019401926000915b8383106107ca57505050505090565b90919293946020806107e883601f19866001960301875289516103ec565b970193019301919392906107bb565b6108629173ffffffffffffffffffffffffffffffffffffffff8251168152602082015115156020820152608061085161083f604085015160a0604086015260a085019061079e565b6060850151848203606086015261049e565b92015190608081840391015261049e565b90565b6040810160408252825180915260206060830193019060005b8181106108e7575050506020818303910152815180825260208201916020808360051b8301019401926000915b8383106108ba57505050505090565b90919293946020806108d883601f19866001960301875289516107f7565b970193019301919392906108ab565b825167ffffffffffffffff1685526020948501949092019160010161087e565b346100e75760006003193601126100e75760025461092481611f51565b906109326040519283610336565b808252601f1961094182611f51565b0160005b818110610a0757505061095781611f95565b9060005b8181106109735750506102a960405192839283610865565b806109ab610992610985600194615923565b67ffffffffffffffff1690565b61099c8387612007565b9067ffffffffffffffff169052565b6109eb6109e66109cc6109be8488612007565b5167ffffffffffffffff1690565b67ffffffffffffffff166000526004602052604060002090565b6120cf565b6109f58287612007565b52610a008186612007565b500161095b565b602090610a12611f69565b82828701015201610945565b346100e75760206003193601126100e75760043567ffffffffffffffff81116100e757610a4f903690600401610645565b90610a586143c7565b6000905b828210610a6557005b610a78610a73838584612274565b6123a2565b6020810191610a92610985845167ffffffffffffffff1690565b15610db157610ad4610abb610abb845173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b158015610da4575b610b2b5760808201949060005b86518051821015610b5557610abb610b0483610b1e93612007565b5173ffffffffffffffffffffffffffffffffffffffff1690565b15610b2b57600101610ae9565b7f8579befe0000000000000000000000000000000000000000000000000000000060005260046000fd5b5050919394929060009260a08601935b84518051821015610b8d57610abb610b0483610b8093612007565b15610b2b57600101610b65565b505095929491909394610ba38651825190614412565b610bb86109cc835167ffffffffffffffff1690565b90610be8610bce845167ffffffffffffffff1690565b67ffffffffffffffff166000526005602052604060002090565b95610bf287615958565b606085019860005b8a518051821015610c4a5790610c1281602093612007565b518051928391012091158015610c3a575b610b2b57610c336001928b615a27565b5001610bfa565b50610c43612457565b8214610c23565b5050976001975093610d61610d9a946003610d8d95610d597f72ec11bb832a18492cf3aafef578325a1e9fc7105b5ba447ca94596fec79393e99610985979f610ca760408e610ca0610ced945160018b01612610565b0151151590565b86547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016178655565b610d4f610d0e8d5173ffffffffffffffffffffffffffffffffffffffff1690565b869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b51600285016126f5565b5191016126f5565b610d7e610d79610985835167ffffffffffffffff1690565b615996565b505167ffffffffffffffff1690565b9260405191829182612789565b0390a20190610a5c565b5060808201515115610adc565b7fc65608950000000000000000000000000000000000000000000000000000000060005260046000fd5b346100e75760006003193601126100e75760005473ffffffffffffffffffffffffffffffffffffffff81163303610e7c577fffffffffffffffffffffffff00000000000000000000000000000000000000006001549133828416176001551660005573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f02b543c60000000000000000000000000000000000000000000000000000000060005260046000fd5b346100e75760006003193601126100e757602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100e75760a06003193601126100e75760043567ffffffffffffffff81116100e7576101c060031982360301126100e7576024359060443567ffffffffffffffff81116100e757610f30903690600401610645565b926064359367ffffffffffffffff85116100e757610f5561071b953690600401610645565b93909260843595610f6587610676565b600401612f24565b67ffffffffffffffff8116036100e757565b359061036882610f6d565b9060206108629281815201906107f7565b346100e75760206003193601126100e75767ffffffffffffffff600435610fc181610f6d565b610fc9611f69565b501660005260046020526040600020604051610fe4816102dc565b60ff825473ffffffffffffffffffffffffffffffffffffffff8116835260a01c16151560208201526001820180549061101c82611f51565b9161102a6040519384610336565b80835260208301916000526020600020916000905b82821061107e576102a98661106d60038a8960408501526110626002820161206e565b60608501520161206e565b608082015260405191829182610f8a565b6040516000855461108e8161201b565b808452906001811690811561110057506001146110c8575b50600192826110ba85946020940382610336565b81520194019101909261103f565b6000878152602081209092505b8183106110ea575050810160200160016110a6565b60018160209254838688010152019201916110d5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b84019091019150600190506110a6565b73ffffffffffffffffffffffffffffffffffffffff8116036100e757565b346100e75760206003193601126100e75773ffffffffffffffffffffffffffffffffffffffff60043561119181611141565b6111996143c7565b1633811461120b57807fffffffffffffffffffffffff0000000000000000000000000000000000000000600054161760005573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b7fdad89dca0000000000000000000000000000000000000000000000000000000060005260046000fd5b9060206108629281815201906103ec565b90602082519201517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116926014811061127e575050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000929350829060140360031b1b161690565b801515036100e757565b908160209103126100e75751610862816112b0565b6040513d6000823e3d90fd5b60409073ffffffffffffffffffffffffffffffffffffffff610862949316815281602082015201906103ec565b92919261131482610398565b916113226040519384610336565b8294818452818301116100e7578281602093846000960137010152565b9060048110156107565760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169116179055565b9080602083519182815201916020808360051b8301019401926000915b8383106113a257505050505090565b909192939460208061142983601f1986600196030187528951908151815260a06114186114066113f46113e28887015160c08a88015260c08701906103ec565b604087015186820360408801526103ec565b606086015185820360608701526103ec565b608085015184820360808601526103ec565b9201519060a08184039101526103ec565b97019301930191939290611393565b9160209082815201919060005b8181106114525750505090565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff873561147b81611141565b168152019401929101611445565b601f8260209493601f19938186528686013760008582860101520116010190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156100e757016020813591019167ffffffffffffffff82116100e75781360383136100e757565b90602083828152019260208260051b82010193836000925b8484106115225750505050505090565b90919293949560208061154a83601f1986600196030188526115448b886114aa565b90611489565b9801940194019294939190611512565b97969491611798906080956117a6956117856103689a9561160a8e60a0815261159060a08201845167ffffffffffffffff169052565b602083015167ffffffffffffffff1660c0820152604083015167ffffffffffffffff1660e0820152606083015163ffffffff16610100820152828c015163ffffffff1661012082015261014060a08401519101907fffffffff00000000000000000000000000000000000000000000000000000000169052565b8d61016060c08301519101528d6101a061175161171b6116e56116af61167961164560e08901516101c06101808a01526102608901906103ec565b6101008901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6089830301888a01526103ec565b6101208801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60888303016101c08901526103ec565b6101408701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878303016101e08801526103ec565b6101608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60868303016102008701526103ec565b6101808501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6085830301610220860152611376565b920151906102407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60828503019101526103ec565b9260208d01528b830360408d0152611438565b9188830360608a01526114fa565b94019063ffffffff169052565b6040906108629392815281602082015201906103ec565b806117db604092610862959461075b565b81602082015201906103ec565b6001549596919560a01c60ff16611f275761183d740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff6001541617600155565b61184786826137d2565b956118e8602061188d6118656109858b5167ffffffffffffffff1690565b60801b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b6040517f2cbc26bb0000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116600482015291829081906024820190565b038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611f2257600091611ef3575b50611ea85761196061195c6119526109cc8a5167ffffffffffffffff1690565b5460a01c60ff1690565b1590565b611e5d57611979610bce885167ffffffffffffffff1690565b6119a361195c60e08a01928351602081519101209060019160005201602052604060002054151590565b611e2657506101008701516014815114801590611df5575b611dbe5750602087015167ffffffffffffffff1667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff821603611d875750878503611d5357610140870151601481510361060b575063ffffffff83168015159081611d36575b50611ce95790611a44913691611308565b6020815191012095611a6a611a63886000526006602052604060002090565b5460ff1690565b94611a748661074c565b85158015611cd6575b15611c6457611b1792611b1c959492611b0992611ad2611aa78c6000526006602052604060002090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b6040519687957fd61629630000000000000000000000000000000000000000000000000000000060208801528c8c6024890161155a565b03601f198101835282610336565b6142c0565b9181159081611c50575b50611c195715611be7577f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df267ffffffffffffffff6002925b611b7b84611b76886000526006602052604060002090565b61133f565b611bb7611ba56040611b95885167ffffffffffffffff1690565b97015167ffffffffffffffff1690565b918360405194859416971695836117ca565b0390a46103687fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff60015416600155565b7f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df267ffffffffffffffff600392611b5e565b50826106416040519283927f10afb5b6000000000000000000000000000000000000000000000000000000008452600484016117b3565b60039150611c5d8161074c565b1438611b26565b611cd28888611c906040611c80835167ffffffffffffffff1690565b92015167ffffffffffffffff1690565b917f5e570e5100000000000000000000000000000000000000000000000000000000600052929167ffffffffffffffff80926064956004521660245216604452565b6000fd5b50611ce08661074c565b60038614611a7d565b611cd283611cfe60808a015163ffffffff1690565b7fdf2964df0000000000000000000000000000000000000000000000000000000060005263ffffffff90811660045216602452604490565b9050611d4c6105e760808a015163ffffffff1690565b1138611a33565b7f88f80aa2000000000000000000000000000000000000000000000000000000006000526004859052602488905260446000fd5b7f38432a220000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b610641906040519182917f55216e3100000000000000000000000000000000000000000000000000000000835230600484016112db565b50611e08611e0282611246565b60601c90565b73ffffffffffffffffffffffffffffffffffffffff163014156119bb565b61064190516040519182917fa50bd14700000000000000000000000000000000000000000000000000000000835260048301611235565b611cd2611e72885167ffffffffffffffff1690565b7fed053c590000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff16600452602490565b611cd2611ebd885167ffffffffffffffff1690565b7ffdbd6a720000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff16600452602490565b611f15915060203d602011611f1b575b611f0d8183610336565b8101906112ba565b38611932565b503d611f03565b6112cf565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b67ffffffffffffffff81116102f85760051b60200190565b60405190611f76826102dc565b6060608083600081526000602082015282604082015282808201520152565b90611f9f82611f51565b611fac6040519182610336565b828152601f19611fbc8294611f51565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051156120025760200190565b611fc6565b80518210156120025760209160051b010190565b90600182811c92168015612064575b602083101461203557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161202a565b906040519182815491828252602082019060005260206000209260005b8181106120a057505061036892500383610336565b845473ffffffffffffffffffffffffffffffffffffffff1683526001948501948794506020909301920161208b565b906040516120dc816102dc565b809260ff815473ffffffffffffffffffffffffffffffffffffffff8116845260a01c16151560208301526001810180549061211682611f51565b916121246040519384610336565b80835260208301916000526020600020916000905b82821061216e5750505050600360809261216992604086015261215e6002820161206e565b60608601520161206e565b910152565b6040516000855461217e8161201b565b80845290600181169081156121f057506001146121b8575b50600192826121aa85946020940382610336565b815201940191019092612139565b6000878152602081209092505b8183106121da57505081016020016001612196565b60018160209254838688010152019201916121c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b8401909101915060019050612196565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41813603018212156100e7570190565b9015612002578061086291612231565b90821015612002576108629160051b810190612231565b359061036882611141565b3590610368826112b0565b9080601f830112156100e75781602061086293359101611308565b9080601f830112156100e75781356122d381611f51565b926122e16040519485610336565b81845260208085019260051b820101918383116100e75760208201905b83821061230d57505050505090565b813567ffffffffffffffff81116100e757602091612330878480948801016122a1565b8152019101906122fe565b9080601f830112156100e757813561235281611f51565b926123606040519485610336565b81845260208085019260051b8201019283116100e757602001905b8282106123885750505090565b60208091833561239781611141565b81520191019061237b565b60c0813603126100e7576123b4610359565b906123be8161228b565b82526123cc60208201610f7f565b60208301526123dd60408201612296565b6040830152606081013567ffffffffffffffff81116100e75761240390369083016122bc565b6060830152608081013567ffffffffffffffff81116100e757612429903690830161233b565b608083015260a08101359067ffffffffffffffff82116100e75761244f9136910161233b565b60a082015290565b60405160208101906000825260208152612472604082610336565b51902090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181106124b2575050565b600081556001016124a7565b9190601f81116124cd57505050565b610368926000526020600020906020601f840160051c830193106124f9575b601f0160051c01906124a7565b90915081906124ec565b919091825167ffffffffffffffff81116102f85761252b81612525845461201b565b846124be565b6020601f821160011461258957819061257a93949560009261257e575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b015190503880612548565b601f1982169061259e84600052602060002090565b9160005b8181106125f8575095836001959697106125c1575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690553880806125b7565b9192602060018192868b0151815501940192016125a2565b8151916801000000000000000083116102f8578154838355808410612672575b506020612644910191600052602060002090565b6000915b8383106126555750505050565b600160208261266683945186612503565b01920192019190612648565b8260005283602060002091820191015b81811061268f5750612630565b8061269c6001925461201b565b806126a9575b5001612682565b601f811183146126bf5750600081555b386126a2565b6126e39083601f6126d585600052602060002090565b920160051c820191016124a7565b600081815260208120818355556126b9565b81519167ffffffffffffffff83116102f8576801000000000000000083116102f857602090825484845580851061276c575b500190600052602060002060005b8381106127425750505050565b600190602073ffffffffffffffffffffffffffffffffffffffff8551169401938184015501612735565b6127839084600052858460002091820191016124a7565b38612727565b90610862916020815273ffffffffffffffffffffffffffffffffffffffff825116602082015267ffffffffffffffff602083015116604082015260408201511515606082015260a06128026127ed606085015160c0608086015260e085019061079e565b6080850151601f19858303018486015261049e565b9201519060c0601f198285030191015261049e565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100e7570180359067ffffffffffffffff82116100e757602001918160051b360383136100e757565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100e7570180359067ffffffffffffffff82116100e7576020019181360383136100e757565b916020610862938181520191611489565b919091357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116926014811061127e575050565b3561086281610676565b90821015612002576129229160051b81019061286b565b9091565b908160209103126100e7575161086281611141565b60409073ffffffffffffffffffffffffffffffffffffffff61086295931681528160208201520191611489565b7fffffffff000000000000000000000000000000000000000000000000000000008116036100e757565b359061036882612968565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156100e757016020813591019167ffffffffffffffff82116100e7578160051b360383136100e757565b90602083828152019060208160051b85010193836000915b838310612a185750505050505090565b909192939495601f1982820301865286357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41843603018112156100e7576020612afb600193868394019081358152612aed612ae2612ac7612aac612a91612a81898801886114aa565b60c08b89015260c0880191611489565b612a9e60408801886114aa565b908783036040890152611489565b612ab960608701876114aa565b908683036060880152611489565b612ad460808601866114aa565b908583036080870152611489565b9260a08101906114aa565b9160a0818503910152611489565b980196019493019190612a08565b612d9f6108629593949260608352612b3560608401612b2783610f7f565b67ffffffffffffffff169052565b612b55612b4460208301610f7f565b67ffffffffffffffff166080850152565b612b75612b6460408301610f7f565b67ffffffffffffffff1660a0850152565b612b91612b8460608301610684565b63ffffffff1660c0850152565b612bad612ba060808301610684565b63ffffffff1660e0850152565b612be6612bbc60a08301612992565b7fffffffff0000000000000000000000000000000000000000000000000000000016610100850152565b60c0810135610120840152612d6e612d62612d23612ce4612ca5612c66612c27612c1360e08901896114aa565b6101c06101408d01526102208c0191611489565b612c356101008901896114aa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08c8403016101608d0152611489565b612c746101208801886114aa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b8403016101808c0152611489565b612cb36101408701876114aa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8403016101a08b0152611489565b612cf26101608601866114aa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0898403016101c08a0152611489565b612d3161018085018561299d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888403016101e08901526129f0565b916101a08101906114aa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa085840301610200860152611489565b9360208201526040818503910152611489565b604051906040820182811067ffffffffffffffff8211176102f85760405260006020838281520152565b90612de682611f51565b612df36040519182610336565b828152601f19612e038294611f51565b019060005b828110612e1457505050565b602090612e1f612db2565b82828501015201612e08565b3561086281610f6d565b3561086281612968565b91909160c0818403126100e757612e54610359565b9281358452602082013567ffffffffffffffff81116100e75781612e799184016122a1565b6020850152604082013567ffffffffffffffff81116100e75781612e9e9184016122a1565b6040850152606082013567ffffffffffffffff81116100e75781612ec39184016122a1565b6060850152608082013567ffffffffffffffff81116100e75781612ee89184016122a1565b608085015260a082013567ffffffffffffffff81116100e757612f0b92016122a1565b60a0830152565b91908203918211612f1f57565b612478565b9391959694909294303303613423576000612f43610180870187612817565b9050613344575b612f95612f67611e02612f616101408a018a61286b565b906128cd565b98612f8b8a612f7a6101a08b018b61286b565b90506105f06105e760808d01612901565b9889918b8a614719565b98909960005b8b518110156131585761300a60208c612fd38f85612fc5610abb610abb610b0484612fcb96612007565b93612007565b518a8c61290b565b91906040518095819482937fc3a7ded6000000000000000000000000000000000000000000000000000000008452600484016128bc565b03915afa8015611f225773ffffffffffffffffffffffffffffffffffffffff9160009161312a575b50169081156130cd57613050613048828e612007565b51888a61290b565b9290813b156100e7576000918b838e613098604051988996879586947f89e364c700000000000000000000000000000000000000000000000000000000865260048601612b09565b03925af1918215611f22576001926130b2575b5001612f9b565b806130c160006130c793610336565b806100dc565b386130ab565b8b6130f5898f6130ee856130e8610b04610641988f95612007565b95612007565b519161290b565b6040939193519384937f2665cea20000000000000000000000000000000000000000000000000000000085526004850161293b565b61314b915060203d8111613151575b6131438183610336565b810190612926565b38613032565b503d613139565b50959793509593509650965061317c613175610180840184612817565b9050612ddc565b9561318b610180840184612817565b9050613232575b5061322b57610368946131fb6131a783612e2b565b6131e86131ef6131bb61012087018761286b565b6131c96101a089018961286b565b9490956131d461036a565b9c8d5267ffffffffffffffff1660208d0152565b3691611308565b60408901523691611308565b6060860152608085015263ffffffff821615613218575091615022565b6132259150608001612901565b91615022565b5050505050565b61328c61324c613246610180860186612817565b90612264565b61325a61012086018661286b565b61328661326688612e2b565b9261327e61327660a08b01612e35565b953690612e3f565b923691611308565b90614af1565b919061329789611ff5565b5273ffffffffffffffffffffffffffffffffffffffff6132d1611e02612f616132c76132466101808a018a612817565b608081019061286b565b921673ffffffffffffffffffffffffffffffffffffffff8316036132f6575b50613192565b61332a61332f926133246133098b611ff5565b515173ffffffffffffffffffffffffffffffffffffffff1690565b906145a7565b612f12565b602061333a88611ff5565b51015238806132f0565b50601461336561335b613246610180890189612817565b606081019061286b565b90500361340f5760146133826132c7613246610180890189612817565b9050036133c5576133c06133a6611e02612f616132c76132466101808b018b612817565b613324611e02612f6161335b6132466101808c018c612817565b612f4a565b6133d96132c7613246610180880188612817565b906106416040519283927f8d666f60000000000000000000000000000000000000000000000000000000008452600484016128bc565b6133d961335b613246610180880188612817565b7f371a73280000000000000000000000000000000000000000000000000000000060005260046000fd5b6040519061345a826102fd565b60606101a08360008152600060208201526000604082015260008382015260006080820152600060a0820152600060c08201528260e082015282610100820152826101208201528261014082015282610160820152826101808201520152565b90156120025790565b90604510156120025760450190565b90821015612002570190565b906009116100e75760010190600890565b906011116100e75760090190600890565b906019116100e75760110190600890565b90601d116100e75760190190600490565b906021116100e757601d0190600490565b906025116100e75760210190600490565b906045116100e75760250190602090565b90929192836046116100e75783116100e757604601917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba0190565b909392938483116100e75784116100e7578101920390565b919091357fffffffffffffffff000000000000000000000000000000000000000000000000811692600881106135dc575050565b7fffffffffffffffff000000000000000000000000000000000000000000000000929350829060080360031b1b161690565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110613642575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b359060208110613682575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b919091357fffff000000000000000000000000000000000000000000000000000000000000811692600281106136e3575050565b7fffff000000000000000000000000000000000000000000000000000000000000929350829060020360031b1b161690565b6040519060c0820182811067ffffffffffffffff8211176102f857604052606060a0836000815282602082015282604082015282808201528260808201520152565b604080519091906137688382610336565b6001815291601f19018260005b82811061378157505050565b60209061378c613715565b82828501015201613775565b604051906137a7602083610336565b600080835282815b8281106137bb57505050565b6020906137c6613715565b828285010152016137af565b906137db61344d565b91604f8210613ce75761382061381a6137f484846134ba565b357fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b600160ff821603613cb7575061385961384b61384561383f85856134de565b906135a8565b60c01c90565b67ffffffffffffffff168452565b61387d61386c61384561383f85856134ef565b67ffffffffffffffff166020850152565b6138a161389061384561383f8585613500565b67ffffffffffffffff166040850152565b6138cd6138c06138ba6138b48585613511565b9061360e565b60e01c90565b63ffffffff166060850152565b6138ed6138e06138ba6138b48585613522565b63ffffffff166080850152565b6139266138fd6138b48484613533565b7fffffffff000000000000000000000000000000000000000000000000000000001660a0850152565b6139396139338383613544565b90613674565b60c08401528160451015613ca15761396061395a61381a6137f485856134c3565b60ff1690565b9081604601838111613c8b5761397a6131e8828685613555565b60e086015283811015613c755761395a61381a6137f461399b9387866134d2565b8201916047830190848211613c60576131e88260476139bc93018786613590565b61010086015283811015613c4a576139e061395a61381a6137f460479488876134d2565b830101916001830190848211613c34576131e8826048613a0293018786613590565b61012086015283811015613c1e57613a2661395a61381a6137f460019488876134d2565b830101916001830190848211613c08576131e8826002613a4893018786613590565b6101408601526003830192848411613bf257613a84613a7d613a77613a71876001968a89613590565b906136af565b60f01c90565b61ffff1690565b0101916002830190848211613bdc576131e882613aa2928786613590565b6101608601526004830190848211613bc657613a77613a7183613ac6938887613590565b9261ffff8294168015600014613b7557505050613ae1613798565b6101808501525b6002820191838311613b5f5780613b0c613a7d613a77613a71876002968a89613590565b010191838311613b4957826131e89185613b2594613590565b6101a084015203613b335790565b635a102da160e11b600052600f60045260246000fd5b635a102da160e11b600052600e60045260246000fd5b635a102da160e11b600052600d60045260246000fd5b6002919294508190613b98613b88613757565b966101808a01978852888761515f565b9490965196613ba78698611ff5565b5201010114613ae857635a102da160e11b600052600c60045260246000fd5b635a102da160e11b600052600b60045260246000fd5b635a102da160e11b600052600a60045260246000fd5b635a102da160e11b600052600960045260246000fd5b635a102da160e11b600052600860045260246000fd5b635a102da160e11b600052600760045260246000fd5b635a102da160e11b600052600660045260246000fd5b635a102da160e11b600052600560045260246000fd5b635a102da160e11b6000526004805260246000fd5b635a102da160e11b600052600360045260246000fd5b635a102da160e11b600052600260045260246000fd5b635a102da160e11b600052600160045260246000fd5b7f789d32630000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b635a102da160e11b600052611cd26024906000600452565b15919082613d7d575b508115613d73575b8115613d1a575090565b9050613d467f85572ffb0000000000000000000000000000000000000000000000000000000082615ba9565b9081613d61575b81613d5757501590565b61195c9150615b49565b9050613d6c81615a83565b1590613d4d565b803b159150613d10565b15915038613d08565b60405190613d95602083610336565b6000808352366020840137565b60408051909190613db38382610336565b6001815291601f1901366020840137565b9060018201809211612f1f57565b91908201809211612f1f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612f1f5760010190565b80548210156120025760005260206000200190600090565b8015612f1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60ff168015612f1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b9594936060936000939092613e90613d86565b96845180614244575b50156142285750509051159050614217575050613eb4613d86565b613ebc613d86565b936000925b6002613f026003613ee68567ffffffffffffffff166000526004602052604060002090565b019367ffffffffffffffff166000526004602052604060002090565b01825495815495613f2b613f2688613f218b613f218b518a5190613dd2565b613dd2565b611f95565b9889976000805b8951821015613f855790613f7d600192613f62613f52610b04858f612007565b91613f5c81613ddf565b9e612007565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b99613f32565b919395979a9294969850506000905b8851821015613fcc5790613fc4600192613f62613fb4610b04858e612007565b91613fbe81613ddf565b9d612007565b018a98613f94565b959893969991929497505060005b8281106141e4575050505060005b828110614160575b50509091929350600090815b8181106140be5750508452805160005b85518110156140b85760005b828110614029575b5060010161400c565b614036610b048286612007565b73ffffffffffffffffffffffffffffffffffffffff61405b610abb610b04868c612007565b9116146140705761406b90613ddf565b614018565b9161407d61409591613e24565b92613f6261408e610b048688612007565b9186612007565b60ff84166140a4575b38614020565b926140b0600191613e4f565b93905061409e565b50815291565b6140cb610b048289612007565b73ffffffffffffffffffffffffffffffffffffffff8116801561415657600090815b8a878210614129575b50505090600192911561410c575b505b01613ffc565b61412390613f6261411c87613ddf565b968b612007565b38614104565b61413a610abb610b04848694612007565b14614147576001016140ed565b5060019150819050388a6140f6565b5050600190614106565b614170610abb610b04838b612007565b1561417d57600101613fe8565b50909192939460005b82811061419857869594939250613ff0565b806141de6141cb6141ab60019486613e0c565b905473ffffffffffffffffffffffffffffffffffffffff9160031b1c1690565b613f626141d788613ddf565b978c612007565b01614186565b61420d82939496613f626141fd6141ab85600197613e0c565b9161420781613ddf565b99612007565b0190899291613fda565b919093614222613da2565b91613ec1565b919350915061423a93508694966157cd565b9094909290613ec1565b90975060018103614293575061428c61426b611e028861426388611ff5565b510151611246565b8461427587611ff5565b51518c60a06142838a611ff5565b510151936155bd565b9638613e99565b7f83d526690000000000000000000000000000000000000000000000000000000060005260045260246000fd5b90604051916142d060c084610336565b60848352602083019060a03683375a9063ffffffff7f00000000000000000000000000000000000000000000000000000000000000001690818311156143495761431e600093928493612f12565b82602083519301913090f1903d9060848211614340575b6000908286523e9190565b60849150614335565b611cd27fffffffff0000000000000000000000000000000000000000000000000000000063ffffffff5a1660e01b167f2882569d00000000000000000000000000000000000000000000000000000000600052907fffffffff0000000000000000000000000000000000000000000000000000000060249216600452565b73ffffffffffffffffffffffffffffffffffffffff6001541633036143e857565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b805191614420815184613dd2565b92831561454d5760005b848110614438575050505050565b818110156145325761444d610b048286612007565b73ffffffffffffffffffffffffffffffffffffffff81168015610b2b5761447383613dc4565b8781106144855750505060010161442a565b848110156145025773ffffffffffffffffffffffffffffffffffffffff6144af610b04838a612007565b1682146144be57600101614473565b7fa1726e400000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff831660045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff61452d610b046145278885612f12565b89612007565b6144af565b614548610b046145428484612f12565b85612007565b61444d565b7f7b6c02970000000000000000000000000000000000000000000000000000000060005260046000fd5b3d156145a2573d9061458882610398565b916145966040519384610336565b82523d6000602084013e565b606090565b91909173ffffffffffffffffffffffffffffffffffffffff604051917f70a0823100000000000000000000000000000000000000000000000000000000835216600482015260208160248173ffffffffffffffffffffffffffffffffffffffff87165afa6000918161465c575b506146585782614622614577565b906106416040519283927f9fe2f95a000000000000000000000000000000000000000000000000000000008452600484016112db565b9150565b90916020823d60201161468b575b8161467760209383610336565b810103126146885750519038614614565b80fd5b3d915061466a565b92919061469f81611f51565b936146ad6040519586610336565b602085838152019160051b8101918383116100e75781905b8382106146d3575050505050565b813567ffffffffffffffff81116100e7576020916146f48784938701612e3f565b8152019101906146c5565b91908110156120025760051b0190565b3561086281611141565b6147659060a06147739495969361476d61473284612e2b565b9361474161012082018261286b565b969061475d614754610180850185612817565b97909401612e35565b973691611308565b933691614693565b92613e7d565b9193909261478082611f95565b9261478a83611f95565b94600091825b8851811015614884576000805b8a88848982851061480d575b5050505050156147bb57600101614790565b6147cb610b04611cd2928b612007565b7f518d2ac50000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b610b0461483f926130e861483a8873ffffffffffffffffffffffffffffffffffffffff97610abb966146ff565b61470f565b91161461484e5760010161479d565b6001915061486d61486361483a838b8b6146ff565b613f62888c612007565b61487961411c87613ddf565b52388a8884896147a9565b509097965094939291909460ff811690816000985b8a518a10156149565760005b8b8782108061494d575b156149405773ffffffffffffffffffffffffffffffffffffffff6148e1610abb610b048f6130e861483a888f8f6146ff565b9116146148f6576148f190613ddf565b6148a5565b939961490660019294939b613e24565b9461492261491861483a838b8b6146ff565b613f628d8c612007565b61493561492e8c613ddf565b9b8b612007565b525b01989091614899565b5050919098600190614937565b508515156148af565b98509250939594975091508161497f575050508151810361497657509190565b80825283529190565b611cd2929161498d91612f12565b7f403b06ae0000000000000000000000000000000000000000000000000000000060005260ff909116600452602452604490565b604051906103c38261031a565b908160209103126100e757604051906149e68261031a565b51815290565b6108629160e0614a96614a84614a0d855161010086526101008601906103ec565b60208681015167ffffffffffffffff169086015260408681015173ffffffffffffffffffffffffffffffffffffffff169086015260608601516060860152614a726080870151608087019073ffffffffffffffffffffffffffffffffffffffff169052565b60a086015185820360a08701526103ec565b60c085015184820360c08601526103ec565b9201519060e08184039101526103ec565b9060206108629281815201906149ec565b907fffffffff000000000000000000000000000000000000000000000000000000006105146020929594956040855260408501906149ec565b92939193614afd612db2565b50614b0e611e026080860151611246565b91614b1f611e026060870151611246565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152909690956020878060248101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa968715611f2257600097614e4e575b5073ffffffffffffffffffffffffffffffffffffffff8716948515614e0a57614bde6149c1565b50614c2c825191614c0f60a0602086015195015195614bfb610379565b97885267ffffffffffffffff166020880152565b73ffffffffffffffffffffffffffffffffffffffff166040860152565b606084015273ffffffffffffffffffffffffffffffffffffffff8816608084015260a083015260c0820152614c5f6103b4565b60e0820152614c6d8561540f565b15614d335790614cb19260209260006040518096819582947f2cab0fb600000000000000000000000000000000000000000000000000000000845260048401614ab8565b03925af160009181614d02575b50614ccc5783614622614577565b929091925b51614cf9614cdd610389565b73ffffffffffffffffffffffffffffffffffffffff9093168352565b60208201529190565b614d2591925060203d602011614d2c575b614d1d8183610336565b8101906149ce565b9038614cbe565b503d614d13565b9050614d3e84615465565b15614dc657614d816000926020926040519485809481937f3907753700000000000000000000000000000000000000000000000000000000835260048301614aa7565b03925af160009181614da5575b50614d9c5783614622614577565b92909192614cd1565b614dbf91925060203d602011614d2c57614d1d8183610336565b9038614d8e565b7fae9b4ce90000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b7fae9b4ce90000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff881660045260246000fd5b614e6891975060203d602011613151576131438183610336565b9538614bb7565b90916060828403126100e7578151614e86816112b0565b92602083015167ffffffffffffffff81116100e75783019080601f830112156100e757815191614eb583610398565b91614ec36040519384610336565b838352602084830101116100e757604092614ee491602080850191016103c9565b92015190565b9194939290608083528051608084015267ffffffffffffffff60208201511660a08401526080614f61614f2d604084015160a060c08801526101208701906103ec565b60608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808783030160e08801526103ec565b910151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80848203016101008501526020808351928381520192019060005b818110614fea5750505061ffff90951660208301526103689291606091614fce9063ffffffff166040830152565b019073ffffffffffffffffffffffffffffffffffffffff169052565b8251805173ffffffffffffffffffffffffffffffffffffffff1685526020908101518186015260409094019390920191600101614fa0565b906000916150e3938361508a73ffffffffffffffffffffffffffffffffffffffff61506f67ffffffffffffffff60208701511667ffffffffffffffff166000526004602052604060002090565b541673ffffffffffffffffffffffffffffffffffffffff1690565b92604051968795869485937f3cf979830000000000000000000000000000000000000000000000000000000085527f00000000000000000000000000000000000000000000000000000000000000009060048601614eea565b03925af1908115611f2257600090600092615138575b50156151025750565b610641906040519182917f0a8d6e8c00000000000000000000000000000000000000000000000000000000835260048301611235565b905061515791503d806000833e61514f8183610336565b810190614e6f565b5090386150f9565b9291615169613715565b91808210156153f95761518361381a6137f48484896134d2565b600160ff821603613cb75750602182018181116153e3576151ac6139338260018601858a613590565b8452818110156153cd5761395a61381a6137f46151ca93858a6134d2565b82019160228301908282116153b7576131e88260226151eb9301858a613590565b6020850152818110156153a15761520e61395a61381a6137f4602294868b6134d2565b83010191600183019082821161538b576131e88260236152309301858a613590565b6040850152818110156153755761525361395a61381a6137f4600194868b6134d2565b83010191600183019082821161535f576131e88260026152759301858a613590565b6060850152818110156153495761529861395a61381a6137f4600194868b6134d2565b8301016001810192828411615333576131e88460026152b99301858a613590565b6080850152600381019282841161531d576002916152e4613a7d613a77613a7188600196898e613590565b01010194818611615307576152fe926131e8928792613590565b60a08201529190565b635a102da160e11b600052601b60045260246000fd5b635a102da160e11b600052601a60045260246000fd5b635a102da160e11b600052601960045260246000fd5b635a102da160e11b600052601860045260246000fd5b635a102da160e11b600052601760045260246000fd5b635a102da160e11b600052601660045260246000fd5b635a102da160e11b600052601560045260246000fd5b635a102da160e11b600052601460045260246000fd5b635a102da160e11b600052601360045260246000fd5b635a102da160e11b600052601260045260246000fd5b635a102da160e11b600052601160045260246000fd5b635a102da160e11b600052601060045260246000fd5b6154397f940a15420000000000000000000000000000000000000000000000000000000082615ba9565b9081615453575b81615449575090565b6108629150615b49565b905061545e81615a83565b1590615440565b6154397faff2afbf0000000000000000000000000000000000000000000000000000000082615ba9565b6154397f1bfc84d00000000000000000000000000000000000000000000000000000000082615ba9565b9080601f830112156100e75781516154d081611f51565b926154de6040519485610336565b81845260208085019260051b8201019283116100e757602001905b8282106155065750505090565b60208091835161551581611141565b8152019101906154f9565b906020828203126100e757815167ffffffffffffffff81116100e75761086292016154b9565b95949060019460a09467ffffffffffffffff6155b89573ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000095168b521660208a0152604089015216606087015260c0608087015260c08601906103ec565b930152565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152606095909291906020848060248101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415611f2257600094615721575b506156628461540f565b615680575b5050505050508051156156775790565b50610862613da2565b6000959650906156d573ffffffffffffffffffffffffffffffffffffffff92604051988997889687957f06b859ef00000000000000000000000000000000000000000000000000000000875260048701615546565b0392165afa908115611f22576000916156fe575b506156f381615c0b565b388080808080615667565b61571b91503d806000833e6157138183610336565b810190615520565b386156e9565b61573b91945060203d602011613151576131438183610336565b9238615658565b9190916080818403126100e757805167ffffffffffffffff81116100e7578361576c9183016154b9565b9260208201519067ffffffffffffffff82116100e75761578d9183016154b9565b91604082015160ff811681036100e75760609092015161086281612968565b60409067ffffffffffffffff610862949316815281602082015201906103ec565b606093600093859385936157e08261548f565b61582a575b505050906157f291615cc9565b80511580159061581e575b61581b5750505061580c613da2565b90615815613d86565b90600090565b92565b5060ff821615156157fd565b9091929450615881965083955073ffffffffffffffffffffffffffffffffffffffff6040518098819582947f1bfc84d0000000000000000000000000000000000000000000000000000000008452600484016157ac565b0392165afa908115611f2257829183948480926158f5575b50509083856158a785615c0b565b6158b081615c0b565b51908160ff8216116158c257806157e5565b7f3d9055a70000000000000000000000000000000000000000000000000000000060005260ff1660045260245260446000fd5b92955092505061591792503d8091833e61590f8183610336565b810190615742565b91939092913880615899565b6002548110156120025760026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015490565b805460005b81811061596c57505060009055565b8061597960019285613e0c565b90549060031b1c600052818401602052600060408120550161595d565b600081815260036020526040902054615a2157600254680100000000000000008110156102f857615a086159d38260018594016002556002613e0c565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b9055600254906000526003602052604060002055600190565b50600090565b6000828152600182016020526040902054615a7c57805490680100000000000000008210156102f85782615a656159d3846001809601855584613e0c565b905580549260005201602052604060002055600190565b5050600090565b60405160208101917f01ffc9a70000000000000000000000000000000000000000000000000000000083527fffffffff00000000000000000000000000000000000000000000000000000000602483015260248252615ae3604483610336565b6179185a10615b1f576020926000925191617530fa6000513d82615b13575b5081615b0c575090565b9050151590565b60201115915038615b02565b7fea7f4b120000000000000000000000000000000000000000000000000000000060005260046000fd5b60405160208101917f01ffc9a70000000000000000000000000000000000000000000000000000000083527f01ffc9a700000000000000000000000000000000000000000000000000000000602483015260248252615ae3604483610336565b604051907fffffffff0000000000000000000000000000000000000000000000000000000060208301937f01ffc9a700000000000000000000000000000000000000000000000000000000855216602483015260248252615ae3604483610336565b80519060005b828110615c1d57505050565b60018101808211612f1f575b838110615c395750600101615c11565b73ffffffffffffffffffffffffffffffffffffffff615c588385612007565b5116615c6a610abb610b048487612007565b14615c7757600101615c29565b611cd2615c87610b048486612007565b7fa1726e400000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b7fffffffff00000000000000000000000000000000000000000000000000000000811615615da957615cfa81615dad565b601082811c9082901c167dffff0000000000000000000000000000000000000000000000000000000016615da95761ffff8260e01c168015908115615d98575b50615d43575050565b7fdf63778f000000000000000000000000000000000000000000000000000000006000527fffffffff000000000000000000000000000000000000000000000000000000009081166004521660245260446000fd5b905061ffff8260e01c161038615d3a565b5050565b7fffffffff00000000000000000000000000000000000000000000000000000000811615615ead577dffff00000000000000000000000000000000000000000000000000000000811615615ea45760ff60015b1660f082901c80615e66575b50600103615e175750565b7fc512f96c000000000000000000000000000000000000000000000000000000006000527fffffffff000000000000000000000000000000000000000000000000000000001660045260246000fd5b60005b60108110615e775750615e0c565b63ffffffff6001821b831616615e90575b600101615e69565b91615e9c600191613dc4565b929050615e88565b60ff6000615e00565b5056fea164736f6c634300081a000a", } diff --git a/chains/evm/gobindings/generated/latest/onramp/onramp.go b/chains/evm/gobindings/generated/latest/onramp/onramp.go index d9654be682..b23fd83313 100644 --- a/chains/evm/gobindings/generated/latest/onramp/onramp.go +++ b/chains/evm/gobindings/generated/latest/onramp/onramp.go @@ -91,7 +91,7 @@ type OnRampStaticConfig struct { } var OnRampMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMNRemote\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyDestChainConfigUpdates\",\"inputs\":[{\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct OnRamp.DestChainConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardFromRouter\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"struct Client.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"struct Client.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllDestChainConfigs\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"struct OnRamp.DestChainConfig[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"destChainConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DestChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExpectedNextMessageNumber\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"struct Client.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"struct Client.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPoolBySourceToken\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sourceToken\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IPoolV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMNRemote\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedTokens\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"CCIPMessageSent\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"tokenAmountBeforeTokenPoolFees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"encodedMessage\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"receipts\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"struct OnRamp.Receipt[]\",\"components\":[{\"name\":\"issuer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"verifierBlobs\",\"type\":\"bytes[]\",\"indexed\":false,\"internalType\":\"bytes[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMNRemote\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DestChainConfigSet\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OnRamp.DestChainConfigArgs\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CanOnlySendOneTokenPerMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotSendZeroTokens\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DestinationChainNotSupported\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DestinationChainNotSupportedByCCV\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DuplicateCCVNotAllowed\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FTFNotSupportedOnPoolV1\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeExceedsMaxAllowed\",\"inputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFeeTokenAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidConfig\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"location\",\"type\":\"uint8\",\"internalType\":\"enum ExtraArgsCodec.EncodingErrorLocation\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"location\",\"type\":\"uint8\",\"internalType\":\"enum MessageV1Codec.EncodingErrorLocation\"}]},{\"type\":\"error\",\"name\":\"InvalidDestChainAddress\",\"inputs\":[{\"name\":\"destChainAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidExtraArgsTag\",\"inputs\":[{\"name\":\"expected\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"actual\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"MustBeCalledByRouter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustSpecifyDefaultOrRequiredCCVs\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RequestedFinalityCanOnlyHaveOneMode\",\"inputs\":[{\"name\":\"encodedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"RouterMustSetOriginalSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"SourceTokenDataTooLarge\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"actualLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maxLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"TokenArgsNotSupportedOnPoolV1\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TokenReceiverNotAllowed\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"UnsupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMN\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyDestChainConfigUpdates\",\"inputs\":[{\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct OnRamp.DestChainConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardFromRouter\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"struct Client.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"struct Client.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"messageId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllDestChainConfigs\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"struct OnRamp.DestChainConfig[]\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"destChainConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DestChainConfig\",\"components\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getExpectedNextMessageNumber\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"struct Client.EVM2AnyMessage\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"tokenAmounts\",\"type\":\"tuple[]\",\"internalType\":\"struct Client.EVMTokenAmount[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPoolBySourceToken\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sourceToken\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IPoolV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMN\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedTokens\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"CCIPMessageSent\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"messageId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"tokenAmountBeforeTokenPoolFees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"encodedMessage\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"receipts\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"struct OnRamp.Receipt[]\",\"components\":[{\"name\":\"issuer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"feeTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"extraArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"verifierBlobs\",\"type\":\"bytes[]\",\"indexed\":false,\"internalType\":\"bytes[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"staticConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OnRamp.StaticConfig\",\"components\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rmnRemote\",\"type\":\"address\",\"internalType\":\"contract IRMN\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenAdminRegistry\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"dynamicConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OnRamp.DynamicConfig\",\"components\":[{\"name\":\"feeQuoter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"feeAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DestChainConfigSet\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"messageNumber\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct OnRamp.DestChainConfigArgs\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"contract IRouter\"},{\"name\":\"addressBytesLength\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"tokenReceiverAllowed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenNetworkFeeUSDCents\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"baseExecutionGasCost\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"laneMandatedCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"defaultExecutor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"offRamp\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CanOnlySendOneTokenPerMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotSendZeroTokens\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DestinationChainNotSupported\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DestinationChainNotSupportedByCCV\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"DuplicateCCVNotAllowed\",\"inputs\":[{\"name\":\"ccvAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FTFNotSupportedOnPoolV1\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeExceedsMaxAllowed\",\"inputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maxUSDCentsPerMessage\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFeeTokenAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidConfig\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"location\",\"type\":\"uint8\",\"internalType\":\"enum ExtraArgsCodec.EncodingErrorLocation\"},{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[{\"name\":\"location\",\"type\":\"uint8\",\"internalType\":\"enum MessageV1Codec.EncodingErrorLocation\"}]},{\"type\":\"error\",\"name\":\"InvalidDestChainAddress\",\"inputs\":[{\"name\":\"destChainAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDestChainConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidExtraArgsTag\",\"inputs\":[{\"name\":\"expected\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"actual\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"MustBeCalledByRouter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustSpecifyDefaultOrRequiredCCVs\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RequestedFinalityCanOnlyHaveOneMode\",\"inputs\":[{\"name\":\"encodedFinality\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"RouterMustSetOriginalSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"SourceTokenDataTooLarge\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"actualLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maxLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"TokenArgsNotSupportedOnPoolV1\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TokenReceiverNotAllowed\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"UnsupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]}]", Bin: "0x61010060405234610367576040516161a838819003601f8101601f191683016001600160401b0381118482101761036c578392829160405283398101039060e08212610367576080821261036757610055610382565b81519092906001600160401b03811681036103675783526020820151926001600160a01b03841684036103675760208101938452604083015163ffffffff81168103610367576040820190815260606100af8186016103a1565b83820190815293607f1901126103675760405192606084016001600160401b0381118582101761036c576040526100e8608086016103a1565b845260a08501519485151586036103675760c061010c9160208701978852016103a1565b9560408501968752331561035657600180546001600160a01b0319163317905583516001600160401b0316158015610344575b8015610332575b8015610323575b6103085792516001600160401b031660805291516001600160a01b0390811660a0529151821660c0525163ffffffff1660e052815116158015610319575b6103085780516002805484516001600160a81b03199091166001600160a01b039384161790151560a01b60ff60a01b161790558351600380546001600160a01b031916919092161790557f0a7df5db91fe3762aa97fa5fb05e9c7adfb1fb97fa4c95ec9cfc0d755e6ef85c9260e09260006060610206610382565b8281526020810183905260408101839052015260805160a051855160c0516001600160401b0390931695926001600160a01b039081169263ffffffff92831691166060610251610382565b89815260208082019384526040808301958652929091019586528151998a5291516001600160a01b03908116928a0192909252915192909216908701529051811660608601529051811660808501529051151560a084015290511660c0820152a1604051615df290816103b68239608051818181610a3a015281816114d10152611d51015260a0518181816112a80152611d7d015260c051818181611dd8015261278f015260e051818181611da90152613f0e0152f35b6306b7c75960e31b60005260046000fd5b508151151561018b565b5063ffffffff8351161561014d565b5081516001600160a01b031615610146565b5080516001600160a01b03161561013f565b639b15e16f60e01b60005260046000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b60405190608082016001600160401b0381118382101761036c57604052565b51906001600160a01b03821682036103675756fe6080604052600436101561001257600080fd5b60003560e01c806306285c6914610117578063181f5a771461011257806320487ded1461010d5780632490769e1461010857806348a98aa4146101035780635cb80c5d146100fe5780636def4ce7146100f95780637437ff9f146100f457806379ba5097146100ef57806389933a51146100ea5780638da5cb5b146100e557806390423fa2146100e0578063df0aa9e9146100db578063e8d80861146100d6578063f2fde38b146100d15763fbca3b74146100cc57600080fd5b611cd3565b611c22565b611bb3565b611202565b61109b565b611054565b610f57565b610e0f565b610d9c565b610d0e565b610ab7565b610a72565b6105e9565b610357565b6102c9565b3461017a57600036600319011261017a576080610132611d19565b61017860405180926001600160a01b036060809267ffffffffffffffff815116855282602082015116602086015263ffffffff6040820151166040860152015116910152565bf35b600080fd5b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101b157604052565b61017f565b6080810190811067ffffffffffffffff8211176101b157604052565b6040810190811067ffffffffffffffff8211176101b157604052565b90601f8019910116810190811067ffffffffffffffff8211176101b157604052565b604051906102206101c0836101ee565b565b60405190610220610160836101ee565b6040519061022060a0836101ee565b6040519061022060c0836101ee565b67ffffffffffffffff81116101b157601f01601f191660200190565b6040519061027b6020836101ee565b60008252565b60005b8381106102945750506000910152565b8181015183820152602001610284565b906020916102bd81518092818552858086019101610281565b601f01601f1916010190565b3461017a57600036600319011261017a5761032860408051906102ec81836101ee565b600c82527f4f6e52616d7020322e302e3000000000000000000000000000000000000000006020830152519182916020835260208301906102a4565b0390f35b67ffffffffffffffff81160361017a57565b35906102208261032c565b908160a091031261017a5790565b3461017a57604036600319011261017a576004356103748161032c565b60243567ffffffffffffffff811161017a57610394903690600401610349565b6103b28267ffffffffffffffff166000526006602052604060002090565b918254916001600160a01b036103dd6103d1856001600160a01b031690565b6001600160a01b031690565b161561054e57604081019160016103f48484611e00565b90501161052457610328946104979461048361043c6104166080870187611e36565b6104236020890189611e36565b905015918261050e575b61043687611f99565b88612f5b565b956104456120b3565b61044f8288611e00565b90506104b7575b6040880161047981519260608b0193845161047360028b01611e69565b916134f1565b9092525285611e00565b151590506104a95760f01c90505b90613a25565b60405190815292839250602083019150565b506001015461ffff16610491565b506105096104d66104d16104cb848a611e00565b90612117565b612125565b60206104e56104cb858b611e00565b01356104fc60208b01516001600160e01b03191690565b9060e08b015192896132c2565b610456565b915061051a8989611e00565b905015159161042d565b7f68c2514e0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fbff66cef0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff821660045260246000fd5b6000fd5b90602060031983011261017a5760043567ffffffffffffffff811161017a5760040160009280601f830112156105e55781359367ffffffffffffffff85116105e257506020808301928560051b01011161017a579190565b80fd5b8380fd5b3461017a576105f73661058a565b90610600614363565b6000915b80831061060d57005b61061883828461212f565b9261062284612152565b67ffffffffffffffff81169081158015610a2e575b8015610a18575b80156109ff575b6109c8578561086691610880610876836108706106b760e083019561069d6106976106708987612189565b61068f6106856101008a95949501809a612189565b94909236916121bf565b9236916121bf565b906143a1565b67ffffffffffffffff166000526006602052604060002090565b9687956106f26106c960208a01612125565b88906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b61086061084260c060408b019a61075961070b8d612167565b8c547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09190911b7cff0000000000000000000000000000000000000000000000000000000016178c55565b6107b761076860808301612221565b8c547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f09190911b7fffff00000000000000000000000000000000000000000000000000000000000016178c55565b6107dd60016107c860a08401612221565b9c019b8c9061ffff1661ffff19825416179055565b61083c8d6107ed6060840161222b565b81547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690151560e81b7dff000000000000000000000000000000000000000000000000000000000016179055565b0161217f565b885465ffffffff0000191660109190911b65ffffffff000016178855565b8d612189565b9060038901612333565b8a612189565b9060028601612333565b6101208801906108926103d183612125565b156109b7576108a36108ed92612125565b7fffffffffffff0000000000000000000000000000000000000000ffffffffffff79ffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b61014087019061091161090b610903848b611e36565b939050612167565b60ff1690565b0361098c57956109727f99415f1fd5d7f97dec3730fd98d0161792f21251c2e963782304b609b288cb269261095761094d600198999a85611e36565b906004840161242c565b610960856158c5565b505460a01c67ffffffffffffffff1690565b610981604051928392836125c7565b0390a2019190610604565b6109969087611e36565b906109b36040519283926303aeba3960e41b8452600484016123d6565b0390fd5b6306b7c75960e31b60005260046000fd5b7fc35aa79d0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5063ffffffff610a1160c0880161217f565b1615610645565b5060ff610a2760408801612167565b161561063e565b5067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168214610637565b6001600160a01b0381160361017a57565b3461017a57604036600319011261017a57610a8e60043561032c565b610aa2602435610a9d81610a61565b61274a565b6040516001600160a01b039091168152602090f35b3461017a57610ac53661058a565b906001600160a01b0360035416918215610bde5760005b818110610ae557005b610af66103d16104d18385876144b9565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091906001600160a01b03831690602081602481855afa8015610bd9576001948892600092610ba9575b5081610b5d575b5050505001610adc565b81610b8d7f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e9385610b9d94615949565b6040519081529081906020820190565b0390a338858180610b53565b610bcb91925060203d8111610bd2575b610bc381836101ee565b8101906144c9565b9038610b4c565b503d610bb9565b61273e565b7f8579befe0000000000000000000000000000000000000000000000000000000060005260046000fd5b906020808351928381520192019060005b818110610c265750505090565b82516001600160a01b0316845260209384019390920191600101610c19565b80516001600160a01b03168252610d0b9160208281015167ffffffffffffffff169082015260408281015160ff169082015260608281015115159082015260808281015161ffff169082015260a08281015161ffff169082015260c08281015163ffffffff169082015260e0828101516001600160a01b031690820152610140610cf9610ce5610100850151610160610100860152610160850190610c08565b610120850151848203610120860152610c08565b920151906101408184039101526102a4565b90565b3461017a57602036600319011261017a5767ffffffffffffffff600435610d348161032c565b610d3c6127e9565b50166000526006602052610328610d566040600020611f99565b604051918291602083526020830190610c45565b6102209092919260608101936001600160a01b0360408092828151168552602081015115156020860152015116910152565b3461017a57600036600319011261017a57600060408051610dbc81610195565b8281528260208201520152610328604051610dd681610195565b60ff6002546001600160a01b038116835260a01c16151560208201526001600160a01b0360035416604082015260405191829182610d6a565b3461017a57600036600319011261017a576000546001600160a01b0381163303610e8b5773ffffffffffffffffffffffffffffffffffffffff19600154913382841617600155166000556001600160a01b033391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f02b543c60000000000000000000000000000000000000000000000000000000060005260046000fd5b6040810160408252825180915260206060830193019060005b818110610f37575050506020818303910152815180825260208201916020808360051b8301019401926000915b838310610f0a57505050505090565b9091929394602080610f28600193601f198682030187528951610c45565b97019301930191939290610efb565b825167ffffffffffffffff16855260209485019490920191600101610ece565b3461017a57600036600319011261017a57600454610f748161209b565b90610f8260405192836101ee565b808252601f19610f918261209b565b0160005b81811061103d575050610fa7816120cf565b9060005b818110610fc357505061032860405192839283610eb5565b80610ffb610fe2610fd5600194615a05565b67ffffffffffffffff1690565b610fec8387612861565b9067ffffffffffffffff169052565b61102161101c61069d61100e8488612861565b5167ffffffffffffffff1690565b611f99565b61102b8287612861565b526110368186612861565b5001610fab565b6020906110486127e9565b82828701015201610f95565b3461017a57600036600319011261017a5760206001600160a01b0360015416604051908152f35b359061022082610a61565b8015150361017a57565b359061022082611086565b3461017a57606036600319011261017a5760006040516110ba81610195565b6004356110c681610a61565b81526024356110d481611086565b60208201908152604435906110e882610a61565b604083019182526110f7614363565b6001600160a01b038351161580156111f8575b6111e9576001600160a01b0383926111a16111cc93611170847f0a7df5db91fe3762aa97fa5fb05e9c7adfb1fb97fa4c95ec9cfc0d755e6ef85c9851166001600160a01b031673ffffffffffffffffffffffffffffffffffffffff196002541617600255565b51151560ff60a01b1974ff000000000000000000000000000000000000000060025492151560a01b16911617600255565b51166001600160a01b031673ffffffffffffffffffffffffffffffffffffffff196003541617600355565b6111d4611d19565b6111e3604051928392836144d8565b0390a180f35b6004846306b7c75960e31b8152fd5b508051151561110a565b3461017a57608036600319011261017a5761121e60043561032c565b60243567ffffffffffffffff811161017a5761123e903690600401610349565b6044359061124d606435610a61565b6040517f2cbc26bb0000000000000000000000000000000000000000000000000000000081526004803560801b77ffffffffffffffff0000000000000000000000000000000016908201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bd957600091611b84575b50611b475760025460a01c60ff16611b1d576113147401000000000000000000000000000000000000000060ff60a01b196002541617600255565b61133460043567ffffffffffffffff166000526006602052604060002090565b906001600160a01b036064351615611af357815461135b6103d16001600160a01b03831681565b3303611ac95781611370608086940182611e36565b61137d6020840184611e36565b9050159081611ab0575b61139087611f99565b61139d9390600435612f5b565b9160a01c67ffffffffffffffff166113b49061288a565b84547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a082901b7bffffffffffffffff000000000000000000000000000000000000000016178555825163ffffffff1694602084015161141d906001600160e01b03191690565b6040805130602080830191909152815297919061143a90896101ee565b604080516064356001600160a01b031660208083019190915281529890611461908a6101ee565b61146b8680611e36565b85549a9160e08c901c60ff16913690611483926128a9565b9060ff1661149091614589565b60a0890151916114a360408a018a611e00565b6114ad9150612922565b936114bb60208b018b611e36565b9690976114c6610210565b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681529a67ffffffffffffffff6004351660208d015267ffffffffffffffff1660408c0152600060608c015263ffffffff1660808b01526001600160e01b03191660a08a0152600060c08a015260e089015261154e60048801611ef7565b6101008901526101208801526101408701526101608601526101808501523690611577926128a9565b6101a08301526115856120b3565b6115926040850185611e00565b9050611a30575b83611612926115e16115bc88946040860151606087015161047360028701611e69565b60608601528060408601526115db60808601516001600160a01b031690565b906145fa565b60c08601526115ee612972565b986115fc6040840184611e00565b15159050611a225760f01c90505b600435613a25565b63ffffffff90911660608401526020870195918652116119f857611637845183614688565b6116446040830183611e00565b90506118d2575b61165781959295614f34565b80835260208151910120906116706040850151516129f6565b6040840190815294606087019360005b604087015180518210156118235760206116b36103d16103d16116a6866116e196612861565b516001600160a01b031690565b6116c18460608c0151612861565b5190604051808095819463958021a760e01b835260043560048401612a40565b03915afa8015610bd9576001600160a01b03916000916117f5575b501680156117b557906000888c9388838961175f611728888f611720606091612125565b980151612861565b51604051998a97889687957f2969470600000000000000000000000000000000000000000000000000000000875260048701612b8b565b03925af18015610bd9578161178d91600194600091611794575b508b51906117878383612861565b52612861565b5001611680565b6117af913d8091833e6117a781836101ee565b810190612aa3565b38611779565b6105866117c96116a68460408c0151612861565b6341e3ac5360e11b6000526001600160a01b031660049081523567ffffffffffffffff16602452604490565b611816915060203d811161181c575b61180e81836101ee565b810190612729565b386116fc565b503d611804565b6103288680858d7f371bc2ff0a006f4ef863b1d27a065d4e9f938b6d883eb154572b4aea593b32cc8e8a6118568f612125565b936118646040820182611e00565b1590506118c65760206118816104cb8360406118b1950190611e00565b0135955b51915192516040519384936001600160a01b03606435169867ffffffffffffffff600435169886612d5c565b0390a4610b8d60ff60a01b1960025416600255565b506118b1600095611885565b61193a6119246118e86104cb6040860186611e00565b60c08601805151156119dd5751905b60208701516001600160e01b0319169060e0880151926064359161191f600435913690612991565b614929565b6101808301519061193482612854565b52612854565b5061195c60406119508651828701515190612861565b51015163ffffffff1690565b60a061196c610180840151612854565b5101515163ffffffff8216811161198457505061164b565b610586925061199c6104d16104cb6040870187611e00565b7f06cf7cbc000000000000000000000000000000000000000000000000000000006000526001600160a01b031660045260245263ffffffff16604452606490565b506119f26119eb8680611e36565b36916128a9565b906118f7565b7f07da6ee60000000000000000000000000000000000000000000000000000000060005260046000fd5b506001015461ffff1661160a565b5093506001611a426040840184611e00565b90500361052457611612838388966115e16115bc611aa4611a6c6104d16104cb6040880188611e00565b6020611a7e6104cb6040890189611e00565b0135611a9560208901516001600160e01b03191690565b9060e0890151926004356132c2565b94505050925050611599565b9050611abf6040840184611e00565b9050151590611387565b7f1c0a35290000000000000000000000000000000000000000000000000000000060005260046000fd5b7fa4ec74790000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b7ffdbd6a72000000000000000000000000000000000000000000000000000000006000526105866004359067ffffffffffffffff60249216600452565b611ba6915060203d602011611bac575b611b9e81836101ee565b810190612875565b386112d9565b503d611b94565b3461017a57602036600319011261017a5767ffffffffffffffff600435611bd98161032c565b166000526006602052600167ffffffffffffffff60406000205460a01c160167ffffffffffffffff8111611c1d5760405167ffffffffffffffff9091168152602090f35b612235565b3461017a57602036600319011261017a576001600160a01b03600435611c4781610a61565b611c4f614363565b16338114611ca9578073ffffffffffffffffffffffffffffffffffffffff1960005416176000556001600160a01b03600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b7fdad89dca0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461017a57602036600319011261017a57611cef60043561032c565b7f9e7177c80000000000000000000000000000000000000000000000000000000060005260046000fd5b60006060604051611d29816101b6565b8281528260208201528260408201520152604051611d46816101b6565b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602082015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016606082015290565b903590601e198136030182121561017a570180359067ffffffffffffffff821161017a57602001918160061b3603831361017a57565b903590601e198136030182121561017a570180359067ffffffffffffffff821161017a5760200191813603831361017a57565b906040519182815491828252602082019060005260206000209260005b818110611e9b575050610220925003836101ee565b84546001600160a01b0316835260019485019487945060209093019201611e86565b90600182811c92168015611eed575b6020831014611ed757565b634e487b7160e01b600052602260045260246000fd5b91607f1691611ecc565b9060405191826000825492611f0b84611ebd565b8084529360018116908115611f775750600114611f30575b50610220925003836101ee565b90506000929192526020600020906000915b818310611f5b5750509060206102209282010138611f23565b6020919350806001915483858901015201910190918492611f42565b90506020925061022094915060ff191682840152151560051b82010138611f23565b906120936004611fa7610222565b9361201661200b8254611fd0611fc3826001600160a01b031690565b6001600160a01b03168952565b67ffffffffffffffff60a082901c16602089015260ff60e082901c16604089015261200560e882901c60ff16151560608a0152565b60f01c90565b61ffff166080870152565b612069612059600183015461203a61202f8261ffff1690565b61ffff1660a08a0152565b63ffffffff601082901c1660c089015260301c6001600160a01b031690565b6001600160a01b031660e0870152565b61207560028201611e69565b61010086015261208760038201611e69565b61012086015201611ef7565b610140830152565b67ffffffffffffffff81116101b15760051b60200190565b604051906120c26020836101ee565b6000808352366020840137565b906120d98261209b565b6120e660405191826101ee565b82815280926120f7601f199161209b565b0190602036910137565b634e487b7160e01b600052603260045260246000fd5b90156121205790565b612101565b35610d0b81610a61565b91908110156121205760051b8101359061015e198136030182121561017a570190565b35610d0b8161032c565b60ff81160361017a57565b35610d0b8161215c565b63ffffffff81160361017a57565b35610d0b81612171565b903590601e198136030182121561017a570180359067ffffffffffffffff821161017a57602001918160051b3603831361017a57565b9291906121cb8161209b565b936121d960405195866101ee565b602085838152019160051b810192831161017a57905b8282106121fb57505050565b60208091833561220a81610a61565b8152019101906121ef565b61ffff81160361017a57565b35610d0b81612215565b35610d0b81611086565b634e487b7160e01b600052601160045260246000fd5b906d04ee2d6d415b85acef81000000008202918083046d04ee2d6d415b85acef81000000001490151715611c1d57565b906e01ed09bead87c0378d8e64000000008202918083046e01ed09bead87c0378d8e64000000001490151715611c1d57565b908160031b9180830460081490151715611c1d57565b908160011b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811603611c1d57565b908160011b9180830460021490151715611c1d57565b81810292918115918404141715611c1d57565b818110612327575050565b6000815560010161231c565b9067ffffffffffffffff83116101b1576801000000000000000083116101b1578154838355808410612397575b5090600052602060002060005b83811061237a5750505050565b600190602084359461238b86610a61565b0193818401550161236d565b6123af9083600052846020600020918201910161231c565b38612360565b908060209392818452848401376000828201840152601f01601f1916010190565b916020610d0b9381815201916123b5565b9190601f81116123f657505050565b610220926000526020600020906020601f840160051c83019310612422575b601f0160051c019061231c565b9091508190612415565b90929167ffffffffffffffff81116101b1576124528161244c8454611ebd565b846123e7565b6000601f8211600114612493578190612484939495600092612488575b50508160011b916000199060031b1c19161790565b9055565b01359050388061246f565b601f198216946124a884600052602060002090565b91805b8781106124e35750836001959697106124c9575b505050811b019055565b0135600019600384901b60f8161c191690553880806124bf565b909260206001819286860135815501940191016124ab565b35906102208261215c565b359061022082612215565b359061022082612171565b9035601e198236030181121561017a57016020813591019167ffffffffffffffff821161017a578160051b3603831361017a57565b9160209082815201919060005b81811061256b5750505090565b9091926020806001926001600160a01b03873561258781610a61565b16815201940192910161255e565b9035601e198236030181121561017a57016020813591019167ffffffffffffffff821161017a57813603831361017a57565b67ffffffffffffffff610d0b9392168152604060208201526125fd604082016125ef8461033e565b67ffffffffffffffff169052565b61261c61260c6020840161107b565b6001600160a01b03166060830152565b61263561262b604084016124fb565b60ff166080830152565b61264d61264460608401611090565b151560a0830152565b61266761265c60808401612506565b61ffff1660c0830152565b61268161267660a08401612506565b61ffff1660e0830152565b61269e61269060c08401612511565b63ffffffff16610100830152565b6127166126e96126c86126b460e086018661251c565b6101606101208701526101a0860191612551565b6126d661010086018661251c565b858303603f190161014087015290612551565b9261270b6126fa610120830161107b565b6001600160a01b0316610160850152565b610140810190612595565b91610180603f19828603019101526123b5565b9081602091031261017a5751610d0b81610a61565b6040513d6000823e3d90fd5b6001600160a01b03604051917fbbe4f6db0000000000000000000000000000000000000000000000000000000083521660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa8015610bd9576001600160a01b03916000916127cc57501690565b6127e5915060203d60201161181c5761180e81836101ee565b1690565b60405190610160820182811067ffffffffffffffff8211176101b15760405260606101408360008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e082015282610100820152826101208201520152565b8051156121205760200190565b80518210156121205760209160051b010190565b9081602091031261017a5751610d0b81611086565b67ffffffffffffffff1667ffffffffffffffff8114611c1d5760010190565b9291926128b582610250565b916128c360405193846101ee565b82948184528183011161017a578281602093846000960137010152565b6040519060c0820182811067ffffffffffffffff8211176101b157604052606060a0836000815282602082015282604082015282808201528260808201520152565b9061292c8261209b565b61293960405191826101ee565b828152809261294a601f199161209b565b019060005b82811061295b57505050565b6020906129666128e0565b8282850101520161294f565b6040519061297f82610195565b60606040838281528260208201520152565b919082604091031261017a576040516129a9816101d2565b602080829480356129b981610a61565b84520135910152565b604051906129d16020836101ee565b600080835282815b8281106129e557505050565b8060606020809385010152016129d9565b90612a008261209b565b612a0d60405191826101ee565b8281528092612a1e601f199161209b565b019060005b828110612a2f57505050565b806060602080938501015201612a23565b60409067ffffffffffffffff610d0b949316815281602082015201906102a4565b81601f8201121561017a578051612a7781610250565b92612a8560405194856101ee565b8184526020828401011161017a57610d0b9160208085019101610281565b9060208282031261017a57815167ffffffffffffffff811161017a57610d0b9201612a61565b9080602083519182815201916020808360051b8301019401926000915b838310612af557505050505090565b9091929394602080612b7c600193601f198682030187528951908151815260a0612b6b612b59612b47612b358887015160c08a88015260c08701906102a4565b604087015186820360408801526102a4565b606086015185820360608701526102a4565b608085015184820360808601526102a4565b9201519060a08184039101526102a4565b97019301930191939290612ae6565b919390610d0b9593612cd9612cf19260a08652612bb560a08701825167ffffffffffffffff169052565b602081015167ffffffffffffffff1660c0870152604081015167ffffffffffffffff1660e0870152606081015163ffffffff16610100870152608081015163ffffffff1661012087015260a08101516001600160e01b03191661014087015260c08101516101608701526101a0612cc4612cac612c94612c7c612c64612c4e8c61026060e08a0151916101c061018082015201906102a4565b6101008801518d8203609f1901888f01526102a4565b6101208701518c8203609f19016101c08e01526102a4565b6101408601518b8203609f19016101e08d01526102a4565b6101608501518a8203609f19016102008c01526102a4565b610180840151898203609f19016102208b0152612ac9565b910151868203609f19016102408801526102a4565b95602085015260408401906001600160a01b03169052565b606082015260808184039101526102a4565b9080602083519182815201916020808360051b8301019401926000915b838310612d2f57505050505090565b9091929394602080612d4d600193601f1986820301875289516102a4565b97019301930191939290612d20565b95949290916001600160a01b03612d8693168752602087015260a0604087015260a08601906102a4565b938085036060820152825180865260208601906020808260051b8901019501916000905b828210612dc85750505050610d0b9394506080818403910152612d03565b90919295602080612e29600193601f198d820301865260a060808c516001600160a01b03815116845263ffffffff86820151168685015263ffffffff60408201511660408501526060810151606085015201519181608082015201906102a4565b980192019201909291612daa565b60405190610100820182811067ffffffffffffffff8211176101b157604052606060e08360008152600060208201528260408201528280820152600060808201528260a08201528260c08201520152565b9060041161017a5790600490565b9093929384831161017a57841161017a578101920390565b919091356001600160e01b031981169260048110612eca575050565b6001600160e01b0319929350829060040360031b1b161690565b9160608383031261017a57825167ffffffffffffffff811161017a5782612f0c918501612a61565b926020810151612f1b81612171565b92604082015167ffffffffffffffff811161017a57610d0b9201612a61565b60409067ffffffffffffffff610d0b959316815281602082015201916123b5565b91929092612f67612e37565b600483101580613146575b15613090575090612f82916151f5565b925b80613075575b60408401612fa781519260608701938451610120880151916153bb565b9092525260c083015151613025575b50608082016001600160a01b03612fd482516001600160a01b031690565b1615612ffa575b5050610d0b612ff560208301516001600160e01b03191690565b61556d565b61301160e061301e9301516001600160a01b031690565b6001600160a01b03169052565b3880612fdb565b6130396130356060840151151590565b1590565b15612fb6577f68a8cf4a0000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5063ffffffff613089845163ffffffff1690565b1615612f8a565b94916000906130e8926130b16103d16103d16002546001600160a01b031690565b906040518095819482937f9cc199960000000000000000000000000000000000000000000000000000000084528a60048501612f3a565b03915afa8015610bd95760009060009060009061311a575b60a088015263ffffffff16865290505b60c0850152612f84565b50505061313c613110913d806000833e61313481836101ee565b810190612ee4565b9192508291613100565b5063534eea5560e11b6001600160e01b031961316b6131658686612e88565b90612eae565b1614612f72565b60208183031261017a5780519067ffffffffffffffff821161017a57019080601f8301121561017a5781516131a68161209b565b926131b460405194856101ee565b81845260208085019260051b82010192831161017a57602001905b8282106131dc5750505090565b6020809183516131eb81610a61565b8152019101906131cf565b95949060009460a09467ffffffffffffffff613243956001600160a01b036001600160e01b031995168b521660208a0152604089015216606087015260c0608087015260c08601906102a4565b930152565b9060028201809211611c1d57565b9060018201809211611c1d57565b6001019081600111611c1d57565b9060148201809211611c1d57565b90600c8201809211611c1d57565b91908201809211611c1d57565b6000198114611c1d5760010190565b80548210156121205760005260206000200190600090565b929394919060036132e78567ffffffffffffffff166000526006602052604060002090565b01936001600160a01b036132fc81841661274a565b169182156134d4576040516301ffc9a760e01b8152634a050aa160e11b6004820152602081602481875afa908115610bd9576000916134b5575b50156134a55761337b600095969798604051998a96879586957f06b859ef000000000000000000000000000000000000000000000000000000008752600487016131f6565b03915afa928315610bd957600093613480575b50825115613475578251906133ad6133a88454809461328e565b6120cf565b906000928394845b8751811015613414576133cb6116a6828a612861565b6001600160a01b0381161561340857906134026001926133f46133ed8a61329b565b9989612861565b906001600160a01b03169052565b016133b5565b50955060018096613402565b509195509193613426575b5050815290565b60005b828110613436575061341f565b8061346f61345c613449600194866132aa565b90546001600160a01b039160031b1c1690565b6133f46134688861329b565b9789612861565b01613429565b9150610d0b90611e69565b61349e9193503d806000833e61349681836101ee565b810190613172565b913861338e565b505050509250610d0b9150611e69565b6134ce915060203d602011611bac57611b9e81836101ee565b38613336565b635f8b555b60e11b6000526001600160a01b031660045260246000fd5b9391929361350d613505825186519061328e565b86519061328e565b9061352061351a836120cf565b926129f6565b94600096875b8351891015613586578861357c61356f60019361355761354d6116a68e9f9d9e9d8b612861565b6133f4838c612861565b613575613564858c612861565b51918093849161329b565b9c612861565b528b612861565b5001979695613526565b959250929350955060005b865181101561361a576135a76116a68289612861565b60006001600160a01b038216815b8881106135ee575b50509060019291156135d1575b5001613591565b6135e8906133f46135e18961329b565b9888612861565b386135ca565b816135ff6103d16116a6848c612861565b1461360c576001016135b5565b5060019150819050386135bd565b509390945060005b85518110156136ab576136386116a68288612861565b60006001600160a01b038216815b87811061367f575b5050906001929115613662575b5001613622565b613679906133f46136728861329b565b9787612861565b3861365b565b816136906103d16116a6848b612861565b1461369d57600101613646565b50600191508190503861364e565b50828252918252925090565b6040519060a0820182811067ffffffffffffffff8211176101b15760405260606080836000815260006020820152600060408201526000838201520152565b906137008261209b565b61370d60405191826101ee565b828152809261371e601f199161209b565b019060005b82811061372f57505050565b60209061373a6136b7565b82828501015201613723565b9081606091031261017a57805161375c81612215565b916040602083015161376d81612171565b920151610d0b81612171565b9160209082815201919060005b8181106137935750505090565b9091926040806001926001600160a01b0387356137af81610a61565b16815260208781013590820152019401929101613786565b949391929067ffffffffffffffff168552608060208601526138206138016137ef8580612595565b60a060808a01526101208901916123b5565b61380e6020860186612595565b888303607f190160a08a0152906123b5565b6040840135601e198536030181121561017a578401916020833593019167ffffffffffffffff841161017a578360061b3603831361017a57610220956138a861387f6138bb936060976138c9978d60c0607f1982860301910152613779565b9161389e61388e88830161107b565b6001600160a01b031660e08d0152565b6080810190612595565b8a8303607f19016101008c0152906123b5565b9087820360408901526102a4565b9401906001600160e01b0319169052565b9063ffffffff8091169116019063ffffffff8211611c1d57565b908160a091031261017a57805191602082015161391081612171565b91604081015161391f81612171565b916080606083015161393081612215565b920151610d0b81611086565b9260c0946001600160a01b039167ffffffffffffffff6001600160e01b03199584610d0b9b9a9616885216602087015260408601521660608401521660808201528160a082015201906102a4565b9081606091031261017a57805161375c81612171565b600119810191908211611c1d57565b600019810191908211611c1d57565b600219810191908211611c1d57565b91908203918211611c1d57565b919082608091031261017a5781516139f181612171565b916020810151916060604083015192015190565b8115613a0f570490565b634e487b7160e01b600052601260045260246000fd5b9382946000906000956040810194613a5f613a5a613a55885151613a4d60408c01809c611e00565b91905061328e565b613248565b6136f6565b9660009586955b88518051881015613c97576103d16103d16116a68a613a8494612861565b613ab860206060880192613a998b8551612861565b51908a60405180958194829363958021a760e01b845260048401612a40565b03915afa8015610bd9576001600160a01b0391600091613c79575b50168015613c3e579060608e9392613aec8b8451612861565b5190613b0360208b01516001600160e01b03191690565b958b613b3e604051988995869485947ff4cdd89e000000000000000000000000000000000000000000000000000000008652600486016137c7565b03915afa8015610bd957600193613bdb938b8f8f95600080958197613be4575b509083929161ffff613b8685613b7f6116a6613bcf99613bd59d9e51612861565b9451612861565b5191613ba2613b93610232565b6001600160a01b039095168552565b63ffffffff8916602085015263ffffffff8b16604085015216606083015260808201526117878383612861565b506138da565b996138da565b96019596613a66565b613bd597506116a6965084939291509361ffff613b8682613b7f613c21613bcf9960603d8111613c37575b613c1981836101ee565b810190613746565b9c9196909c9d5050505050505090919293613b5e565b503d613c0f565b61058688613c506116a68c8f51612861565b6341e3ac5360e11b6000526001600160a01b031660045267ffffffffffffffff16602452604490565b613c91915060203d811161181c5761180e81836101ee565b38613ad3565b50919a9496929395509897968a613cae8187611e00565b9050613fe9575b50508651613cc2906139a0565b99613cd06020860186611e36565b91613cdc915086611e00565b9560609150019486613ced87612125565b91613cf8938a6156ad565b613d028b89612861565b52613d0d8a88612861565b50613d188a88612861565b516020015163ffffffff16613d2c916138da565b90613d378a88612861565b516040015163ffffffff16613d4b916138da565b91613d54610232565b33815290600060208301819052604083015261ffff166060820152613d7761026c565b60808201528651613d87906139af565b90613d928289612861565b52613d9d9087612861565b506002546001600160a01b031692613db490612125565b6040517f910d8f5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff96909616600487015263ffffffff9182166024870152911660448501526001600160a01b03166064840152826084815a93608094fa958615610bd95760008097600094600091613fa9575b5084613e3c613e419261224b565b613a05565b906000965b8651881015613f0457613e8d6001916060613e618b8b612861565b5101613e6e868251612309565b9052858a14613e95575b6060613e848b8b612861565b5101519061328e565b970196613e46565b8b8873eba517d2000000000000000000000000000000006001600160a01b03613ec860808c01516001600160a01b031690565b1603613ed6575b5050613e78565b613e3c613ee29261227b565b613efb6060613ef18d8d612861565b510191825161328e565b90528b88613ecf565b97965097505050507f000000000000000000000000000000000000000000000000000000000000000090613f4181613e3c63ffffffff851661227b565b8511613f4e575050929190565b90613f74613f5f6105869387612309565b6e01ed09bead87c0378d8e6400000000900490565b7f25c2df0a0000000000000000000000000000000000000000000000000000000060005260045263ffffffff16602452604490565b9050613e419850613e3c9450613fd7915060803d608011613fe2575b613fcf81836101ee565b8101906139da565b919950945084613e2e565b503d613fc5565b610a9d6103d16104d16104cb614002948a989698611e00565b926001600160a01b03600091515194169060e08801908151614022610232565b6001600160a01b0385168152908260208301528260408301528260608301526080820152614050878d612861565b5261405b868c612861565b506040516301ffc9a760e01b8152634a050aa160e11b600482015291602083602481875afa8015610bd9578f948c89968f96948d948f968891614344575b50614237575b505050505050156140de575b6119506140cf6140d6956140c960206119506140c997604097612861565b906138da565b958b612861565b90388a613cb5565b50506141649160608c61410f6104d16104cb6141086103d16103d16002546001600160a01b031690565b938b611e00565b6040517f947f821700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c1660048201526001600160a01b03909116602482015294859190829081906044820190565b03915afa908115610bd9576119506140cf6040926140c960206119508f8b906140d69b6140c99a6000806000926141f9575b63ffffffff9293506141e69060606141ae8888612861565b5101946141db8a6141bf8a8a612861565b51019160406141ce8b8b612861565b51019063ffffffff169052565b9063ffffffff169052565b16905297509750505050955050506140ab565b50505063ffffffff6142256141e69260603d606011614230575b61421d81836101ee565b81019061398a565b909350915082614196565b503d614213565b8495985060a0969750614287602061427760608261426e6104cb6142676104d16104cb8b6142c09c9d9e9f611e00565b998d611e00565b01359901612125565b9a01516001600160e01b03191690565b905190604051998a97889687967f1826b1e70000000000000000000000000000000000000000000000000000000088526004880161393c565b03915afa8015610bd9578592828c939181908294614308575b506142fc9060606142ea8888612861565b5101926141db60206141bf8a8a612861565b5288888f8c813861409f565b9150506142fc9250614332915060a03d60a01161433d575b61432a81836101ee565b8101906138f4565b9491929190506142d9565b503d614320565b61435d915060203d602011611bac57611b9e81836101ee565b38614099565b6001600160a01b0360015416330361437757565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b8051916143af81518461328e565b92831561448f5760005b8481106143c7575050505050565b81811015614474576143dc6116a68286612861565b6001600160a01b0381168015610bde576143f583613256565b878110614407575050506001016143b9565b84811015614451576001600160a01b036144246116a6838a612861565b168214614433576001016143f5565b630285c9b960e61b6000526001600160a01b03831660045260246000fd5b6001600160a01b0361446f6116a661446988856139cd565b89612861565b614424565b61448a6116a661448484846139cd565b85612861565b6143dc565b7f7b6c02970000000000000000000000000000000000000000000000000000000060005260046000fd5b91908110156121205760051b0190565b9081602091031261017a575190565b9160806102209294936145288160e08101976001600160a01b036060809267ffffffffffffffff815116855282602082015116602086015263ffffffff6040820151166040860152015116910152565b01906001600160a01b0360408092828151168552602081015115156020860152015116910152565b906020610d0b9281815201906102a4565b9061456b82610250565b61457860405191826101ee565b82815280926120f7601f1991610250565b90815160208210806145f0575b6145bf57036145a25790565b6109b3906040519182916303aeba3960e41b835260048301614550565b5090602081015190816145d1846122ad565b1c6145a257506145e082614561565b9160200360031b1b602082015290565b5060208114614596565b918251601481029080820460141490151715611c1d5761461c61462191613264565b613272565b9061463361462e83613280565b614561565b90601461463f83612854565b5360009260215b86518510156146715760146001916146616116a6888b612861565b60601b8187015201940193614646565b919550936020935060601b90820152828152012090565b906146986103d160608401612125565b6146a9600019936040810190611e00565b9050614721575b6146ba82516139af565b9260005b8481106146cc575050505050565b80826001921461471c5760606146e28287612861565b5101518015614716576147109061470a6146fc8489612861565b51516001600160a01b031690565b86615949565b016146be565b50614710565b614710565b915061472d81516139be565b9161473b6146fc8484612861565b6040516301ffc9a760e01b8152634a050aa160e11b60048201526020816024816001600160a01b0386165afa908115610bd9576000916147a2575b50614782575b506146b0565b61479c9060606147928686612861565b5101519083615949565b3861477c565b6147bb915060203d602011611bac57611b9e81836101ee565b38614776565b604051906147ce826101d2565b60606020838281520152565b919060408382031261017a57604051906147f3826101d2565b8193805167ffffffffffffffff811161017a5782614812918301612a61565b835260208101519167ffffffffffffffff831161017a576020926148369201612a61565b910152565b9060208282031261017a57815167ffffffffffffffff811161017a57610d0b92016147da565b9060806001600160a01b0381614880855160a0865260a08601906102a4565b9467ffffffffffffffff60208201511660208601528260408201511660408601526060810151606086015201511691015290565b906020610d0b928181520190614861565b919060408382031261017a57825167ffffffffffffffff811161017a576020916148f09185016147da565b92015190565b6001600160e01b0319614915610d0b9593606084526060840190614861565b9316602082015260408184039101526102a4565b9092946149346128e0565b5060208201805115614d4f57614957610a9d6103d185516001600160a01b031690565b956001600160a01b038716916040516301ffc9a760e01b8152602081806149a560048201907faff2afbf00000000000000000000000000000000000000000000000000000000602083019252565b0381875afa908115610bd957600091614d30575b5015614d00578051906149ca6147c1565b505185516001600160a01b0316906149e0610232565b88815267ffffffffffffffff8a1660208201529a6001600160a01b031660408c015260608b01526001600160a01b031660808a01526040516301ffc9a760e01b8152634a050aa160e11b60048201528381806024810103815a93602094fa908115610bd957600091614ce1575b5015614bdb5750906000929183614a959899604051998a95869485937ffbc801a7000000000000000000000000000000000000000000000000000000008552600485016148f6565b03925af18015610bd957600094600091614b87575b50614b5c614b119596614b4b614b1f614b3d956116a6614af261090b614ae86020999e9c67ffffffffffffffff166000526006602052604060002090565b5460e01c60ff1690565b946040519b8c918983019190916001600160a01b036020820193169052565b03601f1981018c528b6101ee565b6040519586918683019190916001600160a01b036020820193169052565b03601f1981018652856101ee565b614b56818751614589565b94614589565b93015193614b68610241565b958652602086015260408501526060840152608083015260a082015290565b614b11955060209150614ae896614b4b614b1f614b3d956116a6614af261090b614bc6614b5c983d806000833e614bbe81836101ee565b8101906148c5565b9e909e99505050505095505050969550614aaa565b9792906001600160e01b031916614cb75751614c8d57614c2f6000929183926040519485809481937f9a4575b9000000000000000000000000000000000000000000000000000000008352600483016148b4565b03925af1918215610bd957614b1195614b4b614b1f614b5c936116a6614af261090b614ae8614b3d9a60209a600091614c6a575b509c61069d565b614c8791503d806000833e614c7f81836101ee565b81019061483b565b38614c63565b7f9218ad0a0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4bae66b40000000000000000000000000000000000000000000000000000000060005260046000fd5b614cfa915060203d602011611bac57611b9e81836101ee565b38614a4d565b610586614d1486516001600160a01b031690565b635f8b555b60e11b6000526001600160a01b0316600452602490565b614d49915060203d602011611bac57611b9e81836101ee565b386149b9565b7f5cf044490000000000000000000000000000000000000000000000000000000060005260046000fd5b9592614dfb947fffffffffffffffff0000000000000000000000000000000000000000000000006001600160e01b031994928186948160459d9b97600160f81b8e5260c01b1660018d015260c01b1660098b015260c01b16601189015260e01b16601987015260e01b16601d85015260218401906001600160e01b0319169052565b60258201520190565b90614e1760209282815194859201610281565b0190565b9360019694936001600160f81b03198094899896828a9660f81b168152614e4b8251809360208985019101610281565b019160f81b1683820152614e69825180936020600285019101610281565b01019160f81b1683820152614e88825180936020600285019101610281565b01010190565b60017fffff000000000000000000000000000000000000000000000000000000000000956002958760049a9681956001600160f81b0319610d0b9f9e9c9860f81b168152614ee58251809360208985019101610281565b019160f01b1683820152614f03825180936020600385019101610281565b01019160f01b1683820152614f218251809360208985019101610281565b01019160f01b1660028201520190614e04565b60e081019060ff825151116151df57610100810160ff815151116151c95761012082019260ff845151116151b357610140830160ff8151511161519d5761016084019061ffff8251511161518757610180850193600185515111615171576101a086019361ffff8551511161515b5760609551805161511f575b50865167ffffffffffffffff16602088015167ffffffffffffffff16906040890151614fe19067ffffffffffffffff1690565b986060810151614ff49063ffffffff1690565b9060808101516150079063ffffffff1690565b60a08201516001600160e01b0319169160c00151926040519c8d96602088019661503097614d79565b03601f198101885261504290886101ee565b519081516150509060ff1690565b9051805160ff1698519081516150669060ff1690565b906040519a8b95602087019561507b96614e1b565b03601f198101875261508d90876101ee565b5191825161509b9060ff1690565b9151805161ffff169480516150b19061ffff1690565b92519283516150c19061ffff1690565b9260405197889760208901976150d698614e8e565b03601f19810182526150e890826101ee565b604051928392602084016150fb91614e04565b61510491614e04565b61510d91614e04565b03601f1981018252610d0b90826101ee565b61513491965061512e90612854565b51615b11565b9461ffff8651116151455738614fae565b635a102da160e11b600052602260045260246000fd5b635a102da160e11b600052602360045260246000fd5b635a102da160e11b600052602160045260246000fd5b635a102da160e11b600052602060045260246000fd5b635a102da160e11b600052601f60045260246000fd5b635a102da160e11b600052601e60045260246000fd5b635a102da160e11b600052601d60045260246000fd5b635a102da160e11b600052601c60045260246000fd5b906151fe612e37565b91601382106153a057803563534eea5560e11b6001600160e01b031982160361535e5750600481013560e01c835260088101356001600160e01b0319166020840152600d600c82013560001a615253816120cf565b60408601908152615263826129f6565b906060870191825260005b83811061531257505050506152d683836152cc6152c06152b66152af61529c6152e098876152ea9c9b615c3a565b6001600160a01b0390911660808d015290565b8585615cde565b92919036916128a9565b60a08a01528383615d2d565b94919036916128a9565b60c0880152615cde565b93919036916128a9565b60e084015281036152f9575090565b63d9437f9d60e01b600052600360045260245260446000fd5b8060019161535761534161533a61532d6153519a8d8d615c3a565b91906133f4868a51612861565b8b8b615cde565b9391889a919a51949a36916128a9565b92612861565b520161526e565b7f55a0e02c0000000000000000000000000000000000000000000000000000000060005263534eea5560e11b6004526001600160e01b03191660245260446000fd5b63d9437f9d60e01b6000526002600452602482905260446000fd5b9093919281511561554757506153d081615d5a565b80519260005b8481106153e557509093925050565b6153f56103d16116a68386612861565b15615402576001016153d6565b93919461541c6133a8615414856139af565b84519061328e565b9261543961543461542c836139af565b85519061328e565b6129f6565b968792600097885b8481106154e95750505050505060005b81518110156154dc576000805b86811061549d575b50906001916154985761549261547f6116a68386612861565b6133f461548b8961329b565b9887612861565b01615451565b615492565b6154aa6116a68287612861565b6001600160a01b036154c26103d16116a68789612861565b9116146154d15760010161545e565b506001905080615466565b5050909180825283529190565b90919293949882821461553d579061552f615522836155158b6133f46001976153516116a6898e612861565b6155286135648589612861565b9e612861565b528c612861565b505b01908994939291615441565b9850600190615531565b919350501561556257506155596120b3565b90610d0b6129c2565b90610d0b82516129f6565b6001600160e01b031981161561563d577dffff000000000000000000000000000000000000000000000000000000008116156156345760ff60015b1660f082901c806155f6575b506001036155bf5750565b7fc512f96c000000000000000000000000000000000000000000000000000000006000526001600160e01b03191660045260246000fd5b60005b6010811061560757506155b4565b63ffffffff6001821b831616615620575b6001016155f9565b9161562c600191613256565b929050615618565b60ff60006155a8565b50565b9081602091031261017a5751610d0b81612215565b936156986080946001600160e01b03196001600160a01b039567ffffffffffffffff6156a6969b9a9b16895216602088015260a0604088015260a0870190610c08565b9085820360608701526102a4565b9416910152565b929190926156b96136b7565b506156d88167ffffffffffffffff166000526006602052604060002090565b805490959060e01c60ff1691608085019283516156fb906001600160a01b031690565b60019098015460101c63ffffffff16865163ffffffff1661571b916138da565b9661572790608f61328e565b9460a08701958651516157399161328e565b9160ff1691615747836122c3565b6157509161328e565b9161575a906122f3565b61576590606761328e565b61576e91612309565b6157779161328e565b63ffffffff1692516001600160a01b03169473eba517d2000000000000000000000000000000006001600160a01b038716036158045750505061ffff92506157f6906157e96000935b51956157dc6157cd610232565b6001600160a01b039099168952565b63ffffffff166020880152565b63ffffffff166040860152565b166060830152608082015290565b61581a6103d1602094976001600160a01b031690565b906040615831858301516001600160e01b03191690565b91015192615871875198604051998a96879586957f58c0bafd00000000000000000000000000000000000000000000000000000000875260048701615655565b03915afa908115610bd9576157e96157f69261ffff95600091615896575b50936157c0565b6158b8915060203d6020116158be575b6158b081836101ee565b810190615640565b3861588f565b503d6158a6565b8060005260056020526040600020541560001461594357600454680100000000000000008110156101b15760018101600455600060045482101561212057600490527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01819055600454906000526005602052604060002055600190565b50600090565b91602091600091604051906001600160a01b03858301937fa9059cbb00000000000000000000000000000000000000000000000000000000855216602483015260448201526044815261599d6064826101ee565b519082855af11561273e576000513d6159fc57506001600160a01b0381163b155b6159c55750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b600114156159be565b6004548110156121205760046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015490565b966002615ae597615aca6022610d0b9f9e9c9799600199859f9b6001600160f81b031990615aca9f82615aca9c615ad19c600160f81b8452600184015260f81b166021820152615a938251809360208985019101610281565b019160f81b1683820152615ab1825180936020602385019101610281565b010191888301906001600160f81b03199060f81b169052565b0190614e04565b80926001600160f81b03199060f81b169052565b80927fffff0000000000000000000000000000000000000000000000000000000000009060f01b169052565b602081019060ff82515111615c2257604081019160ff83515111615c0c57606082019160ff83515111615bf657608081019260ff84515111615be05760a0820161ffff81515111615bca57610d0b94615bbc9351945191615b73835160ff1690565b975191615b81835160ff1690565b945190615b8f825160ff1690565b905193615b9d855160ff1690565b935196615bac885161ffff1690565b966040519c8d9b60208d01615a3a565b03601f1981018352826101ee565b635a102da160e11b600052602860045260246000fd5b635a102da160e11b600052602760045260246000fd5b635a102da160e11b600052602660045260246000fd5b635a102da160e11b600052602560045260246000fd5b635a102da160e11b6000526105866024906024600452565b929190926001820191848311615cc55781013560001a828115615cba575060148103615c8d578201938411615c7257013560601c9190565b63d9437f9d60e01b6000526001600452602482905260446000fd5b7f6d1eca280000000000000000000000000000000000000000000000000000000060005260045260246000fd5b945050505060009190565b63d9437f9d60e01b600052600060045260245260446000fd5b91906002820191818311615cc5578381013560f01c0160020192818411615d1257918391615d0b93612e96565b9290929190565b63d9437f9d60e01b6000526001600452602483905260446000fd5b91906001820191818311615cc5578381013560001a0160010192818411615d1257918391615d0b93612e96565b80519060005b828110615d6c57505050565b60018101808211611c1d575b838110615d885750600101615d60565b6001600160a01b03615d9a8385612861565b5116615dac6103d16116a68487612861565b14615db957600101615d78565b610586615dc96116a68486612861565b630285c9b960e61b6000526001600160a01b031660045260249056fea164736f6c634300081a000a", } diff --git a/chains/evm/gobindings/generated/latest/rmn/rmn.go b/chains/evm/gobindings/generated/latest/rmn/rmn.go new file mode 100644 index 0000000000..c3d758abde --- /dev/null +++ b/chains/evm/gobindings/generated/latest/rmn/rmn.go @@ -0,0 +1,1225 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package rmn + +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 AuthorizedCallersAuthorizedCallerArgs struct { + AddedCallers []common.Address + RemovedCallers []common.Address +} + +var RMNMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"curseAdmins\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyAuthorizedCallerUpdates\",\"inputs\":[{\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\",\"internalType\":\"struct AuthorizedCallers.AuthorizedCallerArgs\",\"components\":[{\"name\":\"addedCallers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"removedCallers\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"curse\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"curse\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"internalType\":\"bytes16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAllAuthorizedCallers\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCursedSubjects\",\"inputs\":[],\"outputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"internalType\":\"bytes16[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCursed\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCursed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uncurse\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uncurse\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"internalType\":\"bytes16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AuthorizedCallerAdded\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AuthorizedCallerRemoved\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Cursed\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"indexed\":false,\"internalType\":\"bytes16[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Uncursed\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"indexed\":false,\"internalType\":\"bytes16[]\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyCursed\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotCursed\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressNotAllowed\",\"inputs\":[]}]", + Bin: "0x60806040523461020f576117008038038061001981610214565b92833981019060208183031261020f578051906001600160401b03821161020f570181601f8201121561020f578051916001600160401b0383116101c8578260051b9160208061006a818601610214565b80968152019382010191821161020f57602001915b8183106101ef578333156101de57600180546001600160a01b031916331790556020906100ab82610214565b60008152600036813760408051929083016001600160401b038111848210176101c8576040528252808383015260005b8151811015610142576001906001600160a01b036100f98285610239565b5116856101058261027b565b610112575b5050016100db565b7fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda7758091604051908152a1858561010a565b50505160005b81518110156101b9576001600160a01b036101638284610239565b51169081156101a8577feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef848361019a600195610379565b50604051908152a101610148565b6342bcdf7f60e11b60005260046000fd5b60405161132690816103da8239f35b634e487b7160e01b600052604160045260246000fd5b639b15e16f60e01b60005260046000fd5b82516001600160a01b038116810361020f5781526020928301920161007f565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101c857604052565b805182101561024d5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b805482101561024d5760005260206000200190600090565b600081815260036020526040902054801561037257600019810181811161035c5760025460001981019190821161035c5780820361030b575b50505060025480156102f557600019016102cf816002610263565b8154906000199060031b1b19169055600255600052600360205260006040812055600190565b634e487b7160e01b600052603160045260246000fd5b61034461031c61032d936002610263565b90549060031b1c9283926002610263565b819391549060031b91821b91600019901b19161790565b905560005260036020526040600020553880806102b4565b634e487b7160e01b600052601160045260246000fd5b5050600090565b806000526003602052604060002054156000146103d357600254680100000000000000008110156101c8576103ba61032d8260018594016002556002610263565b9055600254906000526003602052604060002055600190565b5060009056fe608080604052600436101561001357600080fd5b60003560e01c908163181f5a77146109b4575080632451a627146108c65780632cbc26bb14610885578063397796f71461084257806362eed415146107995780636d2d39931461067957806379ba5097146105905780638da5cb5b1461053e57806391a2749a146103565780639a19b32914610263578063d881e092146101be578063f2fde38b146100cb5763f8bb876e146100ae57600080fd5b346100c6576100c46100bf36610bd1565b610e3b565b005b600080fd5b346100c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c65760043573ffffffffffffffffffffffffffffffffffffffff81168091036100c657610123610f7b565b33811461019457807fffffffffffffffffffffffff0000000000000000000000000000000000000000600054161760005573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b7fdad89dca0000000000000000000000000000000000000000000000000000000060005260046000fd5b346100c65760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c65760405180602060045491828152019060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9060005b81811061024d576102498561023d81870382610ace565b60405191829182610c98565b0390f35b8254845260209093019260019283019201610226565b346100c65761027136610bd1565b610279610f7b565b60005b8151811015610321576102ba7fffffffffffffffffffffffffffffffff000000000000000000000000000000006102b38385610e27565b5116611071565b156102c75760010161027c565b6102f2907fffffffffffffffffffffffffffffffff0000000000000000000000000000000092610e27565b51167f73281fa10000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6040517f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba190806103518582610c98565b0390a1005b346100c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c65760043567ffffffffffffffff81116100c65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100c657604051906103d082610a83565b806004013567ffffffffffffffff81116100c6576103f49060043691840101610b56565b825260248101359067ffffffffffffffff82116100c657600461041a9236920101610b56565b60208201908152610429610f7b565b519060005b82518110156104a1578073ffffffffffffffffffffffffffffffffffffffff61045960019386610e27565b511661046481611249565b610470575b500161042e565b60207fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda7758091604051908152a184610469565b505160005b81518110156100c45773ffffffffffffffffffffffffffffffffffffffff6104ce8284610e27565b5116908115610514577feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef6020836105066001956111d7565b50604051908152a1016104a6565b7f8579befe0000000000000000000000000000000000000000000000000000000060005260046000fd5b346100c65760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100c65760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c65760005473ffffffffffffffffffffffffffffffffffffffff8116330361064f577fffffffffffffffffffffffff00000000000000000000000000000000000000006001549133828416176001551660005573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f02b543c60000000000000000000000000000000000000000000000000000000060005260046000fd5b346100c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c6576106b0610b0f565b6040908151906106c08383610ace565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013660208401377fffffffffffffffffffffffffffffffff0000000000000000000000000000000061071783610deb565b91169052610723610f7b565b60005b815181101561076a5761075d7fffffffffffffffffffffffffffffffff000000000000000000000000000000006102b38385610e27565b156102c757600101610726565b82517f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba190806103518582610c98565b346100c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c6576100c46107d3610b0f565b6040907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08251926108048185610ace565b60018452013660208401377fffffffffffffffffffffffffffffffff0000000000000000000000000000000061083983610deb565b91169052610e3b565b346100c65760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c657602061087b610d8e565b6040519015158152f35b346100c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c657602061087b6108c1610b0f565b610cf4565b346100c65760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c6576040518060206002549283815201809260026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9060005b81811061099e5750505081610945910382610ace565b6040519182916020830190602084525180915260408301919060005b81811061096f575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101610961565b825484526020909301926001928301920161092f565b346100c65760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c6576109ec81610a83565b600981527f524d4e20322e312e300000000000000000000000000000000000000000000000602082015260405190602082528181519182602083015260005b838110610a6b5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b60208282018101516040878401015285935001610a2b565b6040810190811067ffffffffffffffff821117610a9f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a9f57604052565b600435907fffffffffffffffffffffffffffffffff00000000000000000000000000000000821682036100c657565b67ffffffffffffffff8111610a9f5760051b60200190565b9080601f830112156100c657813590610b6e82610b3e565b92610b7c6040519485610ace565b82845260208085019360051b8201019182116100c657602001915b818310610ba45750505090565b823573ffffffffffffffffffffffffffffffffffffffff811681036100c657815260209283019201610b97565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100c6576004359067ffffffffffffffff82116100c657806023830112156100c657816004013590610c2882610b3e565b92610c366040519485610ace565b8284526024602085019360051b8201019182116100c657602401915b818310610c5f5750505090565b82357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681036100c657815260209283019201610c52565b602060408183019282815284518094520192019060005b818110610cbc5750505090565b82517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016845260209384019390920191600101610caf565b60045415610d88577fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600052600560205260406000205415801590610d375790565b507f010000000000000000000000000000010000000000000000000000000000000060005260056020527f8f496e4ceafb62bf7f18e44784f657270af67789253a1cc665c8d949978172bc54151590565b50600090565b60045415610de6577f010000000000000000000000000000010000000000000000000000000000000060005260056020527f8f496e4ceafb62bf7f18e44784f657270af67789253a1cc665c8d949978172bc54151590565b600090565b805115610df85760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610df85760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff600154163303610f3a575b60005b8151811015610f0357610e9c7fffffffffffffffffffffffffffffffff00000000000000000000000000000000610e958385610e27565b5116611210565b15610ea957600101610e5e565b610ed4907fffffffffffffffffffffffffffffffff0000000000000000000000000000000092610e27565b51167f19d5c79b0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b50610f357f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f749160405191829182610c98565b0390a1565b336000526003602052604060002054610e5b577fd86ad9cf000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff600154163303610f9c57565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b8054821015610df85760005260206000200190600090565b80548015611042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906110138282610fc6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b1916905555565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008181526005602052604090205480156111a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811161117657600454907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161117657818103611107575b5050506110f36004610fde565b600052600560205260006040812055600190565b61115e611118611129936004610fc6565b90549060031b1c9283926004610fc6565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905560005260056020526040600020553880806110e6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5050600090565b80549068010000000000000000821015610a9f57816111299160016111d394018155610fc6565b9055565b80600052600360205260406000205415600014610d88576111f98160026111ac565b600254906000526003602052604060002055600190565b80600052600560205260406000205415600014610d88576112328160046111ac565b600454906000526005602052604060002055600190565b60008181526003602052604090205480156111a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811161117657600254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211611176578082036112df575b5050506112cb6002610fde565b600052600360205260006040812055600190565b6113016112f0611129936002610fc6565b90549060031b1c9283926002610fc6565b905560005260036020526040600020553880806112be56fea164736f6c634300081a000a", +} + +var RMNABI = RMNMetaData.ABI + +var RMNBin = RMNMetaData.Bin + +func DeployRMN(auth *bind.TransactOpts, backend bind.ContractBackend, curseAdmins []common.Address) (common.Address, *types.Transaction, *RMN, error) { + parsed, err := RMNMetaData.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(RMNBin), backend, curseAdmins) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &RMN{address: address, abi: *parsed, RMNCaller: RMNCaller{contract: contract}, RMNTransactor: RMNTransactor{contract: contract}, RMNFilterer: RMNFilterer{contract: contract}}, nil +} + +type RMN struct { + address common.Address + abi abi.ABI + RMNCaller + RMNTransactor + RMNFilterer +} + +type RMNCaller struct { + contract *bind.BoundContract +} + +type RMNTransactor struct { + contract *bind.BoundContract +} + +type RMNFilterer struct { + contract *bind.BoundContract +} + +type RMNSession struct { + Contract *RMN + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type RMNCallerSession struct { + Contract *RMNCaller + CallOpts bind.CallOpts +} + +type RMNTransactorSession struct { + Contract *RMNTransactor + TransactOpts bind.TransactOpts +} + +type RMNRaw struct { + Contract *RMN +} + +type RMNCallerRaw struct { + Contract *RMNCaller +} + +type RMNTransactorRaw struct { + Contract *RMNTransactor +} + +func NewRMN(address common.Address, backend bind.ContractBackend) (*RMN, error) { + abi, err := abi.JSON(strings.NewReader(RMNABI)) + if err != nil { + return nil, err + } + contract, err := bindRMN(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &RMN{address: address, abi: abi, RMNCaller: RMNCaller{contract: contract}, RMNTransactor: RMNTransactor{contract: contract}, RMNFilterer: RMNFilterer{contract: contract}}, nil +} + +func NewRMNCaller(address common.Address, caller bind.ContractCaller) (*RMNCaller, error) { + contract, err := bindRMN(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RMNCaller{contract: contract}, nil +} + +func NewRMNTransactor(address common.Address, transactor bind.ContractTransactor) (*RMNTransactor, error) { + contract, err := bindRMN(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RMNTransactor{contract: contract}, nil +} + +func NewRMNFilterer(address common.Address, filterer bind.ContractFilterer) (*RMNFilterer, error) { + contract, err := bindRMN(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RMNFilterer{contract: contract}, nil +} + +func bindRMN(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := RMNMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_RMN *RMNRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMN.Contract.RMNCaller.contract.Call(opts, result, method, params...) +} + +func (_RMN *RMNRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMN.Contract.RMNTransactor.contract.Transfer(opts) +} + +func (_RMN *RMNRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMN.Contract.RMNTransactor.contract.Transact(opts, method, params...) +} + +func (_RMN *RMNCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMN.Contract.contract.Call(opts, result, method, params...) +} + +func (_RMN *RMNTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMN.Contract.contract.Transfer(opts) +} + +func (_RMN *RMNTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMN.Contract.contract.Transact(opts, method, params...) +} + +func (_RMN *RMNCaller) GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _RMN.contract.Call(opts, &out, "getAllAuthorizedCallers") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_RMN *RMNSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _RMN.Contract.GetAllAuthorizedCallers(&_RMN.CallOpts) +} + +func (_RMN *RMNCallerSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _RMN.Contract.GetAllAuthorizedCallers(&_RMN.CallOpts) +} + +func (_RMN *RMNCaller) GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) { + var out []interface{} + err := _RMN.contract.Call(opts, &out, "getCursedSubjects") + + if err != nil { + return *new([][16]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][16]byte)).(*[][16]byte) + + return out0, err + +} + +func (_RMN *RMNSession) GetCursedSubjects() ([][16]byte, error) { + return _RMN.Contract.GetCursedSubjects(&_RMN.CallOpts) +} + +func (_RMN *RMNCallerSession) GetCursedSubjects() ([][16]byte, error) { + return _RMN.Contract.GetCursedSubjects(&_RMN.CallOpts) +} + +func (_RMN *RMNCaller) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) { + var out []interface{} + err := _RMN.contract.Call(opts, &out, "isCursed", subject) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_RMN *RMNSession) IsCursed(subject [16]byte) (bool, error) { + return _RMN.Contract.IsCursed(&_RMN.CallOpts, subject) +} + +func (_RMN *RMNCallerSession) IsCursed(subject [16]byte) (bool, error) { + return _RMN.Contract.IsCursed(&_RMN.CallOpts, subject) +} + +func (_RMN *RMNCaller) IsCursed0(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _RMN.contract.Call(opts, &out, "isCursed0") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_RMN *RMNSession) IsCursed0() (bool, error) { + return _RMN.Contract.IsCursed0(&_RMN.CallOpts) +} + +func (_RMN *RMNCallerSession) IsCursed0() (bool, error) { + return _RMN.Contract.IsCursed0(&_RMN.CallOpts) +} + +func (_RMN *RMNCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RMN.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_RMN *RMNSession) Owner() (common.Address, error) { + return _RMN.Contract.Owner(&_RMN.CallOpts) +} + +func (_RMN *RMNCallerSession) Owner() (common.Address, error) { + return _RMN.Contract.Owner(&_RMN.CallOpts) +} + +func (_RMN *RMNCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _RMN.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_RMN *RMNSession) TypeAndVersion() (string, error) { + return _RMN.Contract.TypeAndVersion(&_RMN.CallOpts) +} + +func (_RMN *RMNCallerSession) TypeAndVersion() (string, error) { + return _RMN.Contract.TypeAndVersion(&_RMN.CallOpts) +} + +func (_RMN *RMNTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMN.contract.Transact(opts, "acceptOwnership") +} + +func (_RMN *RMNSession) AcceptOwnership() (*types.Transaction, error) { + return _RMN.Contract.AcceptOwnership(&_RMN.TransactOpts) +} + +func (_RMN *RMNTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _RMN.Contract.AcceptOwnership(&_RMN.TransactOpts) +} + +func (_RMN *RMNTransactor) ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _RMN.contract.Transact(opts, "applyAuthorizedCallerUpdates", authorizedCallerArgs) +} + +func (_RMN *RMNSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _RMN.Contract.ApplyAuthorizedCallerUpdates(&_RMN.TransactOpts, authorizedCallerArgs) +} + +func (_RMN *RMNTransactorSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _RMN.Contract.ApplyAuthorizedCallerUpdates(&_RMN.TransactOpts, authorizedCallerArgs) +} + +func (_RMN *RMNTransactor) Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { + return _RMN.contract.Transact(opts, "curse", subject) +} + +func (_RMN *RMNSession) Curse(subject [16]byte) (*types.Transaction, error) { + return _RMN.Contract.Curse(&_RMN.TransactOpts, subject) +} + +func (_RMN *RMNTransactorSession) Curse(subject [16]byte) (*types.Transaction, error) { + return _RMN.Contract.Curse(&_RMN.TransactOpts, subject) +} + +func (_RMN *RMNTransactor) Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { + return _RMN.contract.Transact(opts, "curse0", subjects) +} + +func (_RMN *RMNSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMN.Contract.Curse0(&_RMN.TransactOpts, subjects) +} + +func (_RMN *RMNTransactorSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMN.Contract.Curse0(&_RMN.TransactOpts, subjects) +} + +func (_RMN *RMNTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _RMN.contract.Transact(opts, "transferOwnership", to) +} + +func (_RMN *RMNSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMN.Contract.TransferOwnership(&_RMN.TransactOpts, to) +} + +func (_RMN *RMNTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMN.Contract.TransferOwnership(&_RMN.TransactOpts, to) +} + +func (_RMN *RMNTransactor) Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { + return _RMN.contract.Transact(opts, "uncurse", subject) +} + +func (_RMN *RMNSession) Uncurse(subject [16]byte) (*types.Transaction, error) { + return _RMN.Contract.Uncurse(&_RMN.TransactOpts, subject) +} + +func (_RMN *RMNTransactorSession) Uncurse(subject [16]byte) (*types.Transaction, error) { + return _RMN.Contract.Uncurse(&_RMN.TransactOpts, subject) +} + +func (_RMN *RMNTransactor) Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { + return _RMN.contract.Transact(opts, "uncurse0", subjects) +} + +func (_RMN *RMNSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMN.Contract.Uncurse0(&_RMN.TransactOpts, subjects) +} + +func (_RMN *RMNTransactorSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMN.Contract.Uncurse0(&_RMN.TransactOpts, subjects) +} + +type RMNAuthorizedCallerAddedIterator struct { + Event *RMNAuthorizedCallerAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNAuthorizedCallerAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNAuthorizedCallerAddedIterator) Error() error { + return it.fail +} + +func (it *RMNAuthorizedCallerAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNAuthorizedCallerAdded struct { + Caller common.Address + Raw types.Log +} + +func (_RMN *RMNFilterer) FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*RMNAuthorizedCallerAddedIterator, error) { + + logs, sub, err := _RMN.contract.FilterLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return &RMNAuthorizedCallerAddedIterator{contract: _RMN.contract, event: "AuthorizedCallerAdded", logs: logs, sub: sub}, nil +} + +func (_RMN *RMNFilterer) WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *RMNAuthorizedCallerAdded) (event.Subscription, error) { + + logs, sub, err := _RMN.contract.WatchLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNAuthorizedCallerAdded) + if err := _RMN.contract.UnpackLog(event, "AuthorizedCallerAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMN *RMNFilterer) ParseAuthorizedCallerAdded(log types.Log) (*RMNAuthorizedCallerAdded, error) { + event := new(RMNAuthorizedCallerAdded) + if err := _RMN.contract.UnpackLog(event, "AuthorizedCallerAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNAuthorizedCallerRemovedIterator struct { + Event *RMNAuthorizedCallerRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNAuthorizedCallerRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNAuthorizedCallerRemovedIterator) Error() error { + return it.fail +} + +func (it *RMNAuthorizedCallerRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNAuthorizedCallerRemoved struct { + Caller common.Address + Raw types.Log +} + +func (_RMN *RMNFilterer) FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*RMNAuthorizedCallerRemovedIterator, error) { + + logs, sub, err := _RMN.contract.FilterLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return &RMNAuthorizedCallerRemovedIterator{contract: _RMN.contract, event: "AuthorizedCallerRemoved", logs: logs, sub: sub}, nil +} + +func (_RMN *RMNFilterer) WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *RMNAuthorizedCallerRemoved) (event.Subscription, error) { + + logs, sub, err := _RMN.contract.WatchLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNAuthorizedCallerRemoved) + if err := _RMN.contract.UnpackLog(event, "AuthorizedCallerRemoved", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMN *RMNFilterer) ParseAuthorizedCallerRemoved(log types.Log) (*RMNAuthorizedCallerRemoved, error) { + event := new(RMNAuthorizedCallerRemoved) + if err := _RMN.contract.UnpackLog(event, "AuthorizedCallerRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNCursedIterator struct { + Event *RMNCursed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNCursedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNCursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNCursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNCursedIterator) Error() error { + return it.fail +} + +func (it *RMNCursedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNCursed struct { + Subjects [][16]byte + Raw types.Log +} + +func (_RMN *RMNFilterer) FilterCursed(opts *bind.FilterOpts) (*RMNCursedIterator, error) { + + logs, sub, err := _RMN.contract.FilterLogs(opts, "Cursed") + if err != nil { + return nil, err + } + return &RMNCursedIterator{contract: _RMN.contract, event: "Cursed", logs: logs, sub: sub}, nil +} + +func (_RMN *RMNFilterer) WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNCursed) (event.Subscription, error) { + + logs, sub, err := _RMN.contract.WatchLogs(opts, "Cursed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNCursed) + if err := _RMN.contract.UnpackLog(event, "Cursed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMN *RMNFilterer) ParseCursed(log types.Log) (*RMNCursed, error) { + event := new(RMNCursed) + if err := _RMN.contract.UnpackLog(event, "Cursed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNOwnershipTransferRequestedIterator struct { + Event *RMNOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *RMNOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMN *RMNFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMN.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNOwnershipTransferRequestedIterator{contract: _RMN.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_RMN *RMNFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMN.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNOwnershipTransferRequested) + if err := _RMN.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMN *RMNFilterer) ParseOwnershipTransferRequested(log types.Log) (*RMNOwnershipTransferRequested, error) { + event := new(RMNOwnershipTransferRequested) + if err := _RMN.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNOwnershipTransferredIterator struct { + Event *RMNOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *RMNOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMN *RMNFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMN.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNOwnershipTransferredIterator{contract: _RMN.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_RMN *RMNFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMN.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNOwnershipTransferred) + if err := _RMN.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMN *RMNFilterer) ParseOwnershipTransferred(log types.Log) (*RMNOwnershipTransferred, error) { + event := new(RMNOwnershipTransferred) + if err := _RMN.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNUncursedIterator struct { + Event *RMNUncursed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNUncursedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNUncursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNUncursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNUncursedIterator) Error() error { + return it.fail +} + +func (it *RMNUncursedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNUncursed struct { + Subjects [][16]byte + Raw types.Log +} + +func (_RMN *RMNFilterer) FilterUncursed(opts *bind.FilterOpts) (*RMNUncursedIterator, error) { + + logs, sub, err := _RMN.contract.FilterLogs(opts, "Uncursed") + if err != nil { + return nil, err + } + return &RMNUncursedIterator{contract: _RMN.contract, event: "Uncursed", logs: logs, sub: sub}, nil +} + +func (_RMN *RMNFilterer) WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNUncursed) (event.Subscription, error) { + + logs, sub, err := _RMN.contract.WatchLogs(opts, "Uncursed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNUncursed) + if err := _RMN.contract.UnpackLog(event, "Uncursed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMN *RMNFilterer) ParseUncursed(log types.Log) (*RMNUncursed, error) { + event := new(RMNUncursed) + if err := _RMN.contract.UnpackLog(event, "Uncursed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (RMNAuthorizedCallerAdded) Topic() common.Hash { + return common.HexToHash("0xeb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef") +} + +func (RMNAuthorizedCallerRemoved) Topic() common.Hash { + return common.HexToHash("0xc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda77580") +} + +func (RMNCursed) Topic() common.Hash { + return common.HexToHash("0x1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f74") +} + +func (RMNOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (RMNOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (RMNUncursed) Topic() common.Hash { + return common.HexToHash("0x0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba1") +} + +func (_RMN *RMN) Address() common.Address { + return _RMN.address +} + +type RMNInterface interface { + GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) + + GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) + + IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) + + IsCursed0(opts *bind.CallOpts) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) + + Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) + + Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) + + Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) + + FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*RMNAuthorizedCallerAddedIterator, error) + + WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *RMNAuthorizedCallerAdded) (event.Subscription, error) + + ParseAuthorizedCallerAdded(log types.Log) (*RMNAuthorizedCallerAdded, error) + + FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*RMNAuthorizedCallerRemovedIterator, error) + + WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *RMNAuthorizedCallerRemoved) (event.Subscription, error) + + ParseAuthorizedCallerRemoved(log types.Log) (*RMNAuthorizedCallerRemoved, error) + + FilterCursed(opts *bind.FilterOpts) (*RMNCursedIterator, error) + + WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNCursed) (event.Subscription, error) + + ParseCursed(log types.Log) (*RMNCursed, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*RMNOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*RMNOwnershipTransferred, error) + + FilterUncursed(opts *bind.FilterOpts) (*RMNUncursedIterator, error) + + WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNUncursed) (event.Subscription, error) + + ParseUncursed(log types.Log) (*RMNUncursed, error) + + Address() common.Address +} diff --git a/chains/evm/gobindings/generated/latest/rmn_remote/rmn_remote.go b/chains/evm/gobindings/generated/latest/rmn_remote/rmn_remote.go deleted file mode 100644 index 36dd2fd2bd..0000000000 --- a/chains/evm/gobindings/generated/latest/rmn_remote/rmn_remote.go +++ /dev/null @@ -1,1242 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package rmn_remote - -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 IRMNRemoteSignature struct { - R [32]byte - S [32]byte -} - -type IRMNTaggedRoot struct { - CommitStore common.Address - Root [32]byte -} - -type InternalMerkleRoot struct { - SourceChainSelector uint64 - OnRampAddress []byte - MinSeqNr uint64 - MaxSeqNr uint64 - MerkleRoot [32]byte -} - -type RMNRemoteConfig struct { - RmnHomeContractConfigDigest [32]byte - Signers []RMNRemoteSigner - FSign uint64 -} - -type RMNRemoteSigner struct { - OnchainPublicKey common.Address - NodeIndex uint64 -} - -var RMNRemoteMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"legacyRMN\",\"type\":\"address\",\"internalType\":\"contract IRMN\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"curse\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"curse\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"internalType\":\"bytes16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCursedSubjects\",\"inputs\":[],\"outputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"internalType\":\"bytes16[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLocalChainSelector\",\"inputs\":[],\"outputs\":[{\"name\":\"localChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReportDigestHeader\",\"inputs\":[],\"outputs\":[{\"name\":\"digestHeader\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getVersionedConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"version\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RMNRemote.Config\",\"components\":[{\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signers\",\"type\":\"tuple[]\",\"internalType\":\"struct RMNRemote.Signer[]\",\"components\":[{\"name\":\"onchainPublicKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nodeIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"fSign\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isBlessed\",\"inputs\":[{\"name\":\"taggedRoot\",\"type\":\"tuple\",\"internalType\":\"struct IRMN.TaggedRoot\",\"components\":[{\"name\":\"commitStore\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCursed\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCursed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setConfig\",\"inputs\":[{\"name\":\"newConfig\",\"type\":\"tuple\",\"internalType\":\"struct RMNRemote.Config\",\"components\":[{\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signers\",\"type\":\"tuple[]\",\"internalType\":\"struct RMNRemote.Signer[]\",\"components\":[{\"name\":\"onchainPublicKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nodeIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"fSign\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uncurse\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uncurse\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"internalType\":\"bytes16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verify\",\"inputs\":[{\"name\":\"offRampAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"merkleRoots\",\"type\":\"tuple[]\",\"internalType\":\"struct Internal.MerkleRoot[]\",\"components\":[{\"name\":\"sourceChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"onRampAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"minSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxSeqNr\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"merkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"signatures\",\"type\":\"tuple[]\",\"internalType\":\"struct IRMNRemote.Signature[]\",\"components\":[{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RMNRemote.Config\",\"components\":[{\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signers\",\"type\":\"tuple[]\",\"internalType\":\"struct RMNRemote.Signer[]\",\"components\":[{\"name\":\"onchainPublicKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nodeIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"fSign\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Cursed\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"indexed\":false,\"internalType\":\"bytes16[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Uncursed\",\"inputs\":[{\"name\":\"subjects\",\"type\":\"bytes16[]\",\"indexed\":false,\"internalType\":\"bytes16[]\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyCursed\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConfigNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DuplicateOnchainPublicKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignerOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IsBlessedNotAvailable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotCursed\",\"inputs\":[{\"name\":\"subject\",\"type\":\"bytes16\",\"internalType\":\"bytes16\"}]},{\"type\":\"error\",\"name\":\"NotEnoughSigners\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderSignatures\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThresholdNotMet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroValueNotAllowed\",\"inputs\":[]}]", - Bin: "0x60c0346100d357601f6121f938819003918201601f19168301916001600160401b038311848410176100d85780849260409485528339810103126100d35780516001600160401b038116918282036100d35760200151916001600160a01b03831683036100d35733156100c257600180546001600160a01b03191633179055156100b15760805260a05260405161210a90816100ef82396080518181816102fe0152610712015260a05181610f7d0152f35b63273e150360e21b60005260046000fd5b639b15e16f60e01b60005260046000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c8063181f5a77146119ce578063198f0f77146112df5780631add205f146111145780632cbc26bb146110d3578063397796f7146110905780634d61677114610f3557806362eed41514610e155780636509a95414610dbc5780636d2d399314610c9c57806370a9089e146105f057806379ba5097146105075780638da5cb5b146104b55780639a19b329146103c7578063d881e09214610322578063eaa83ddd146102bf578063f2fde38b146101cf5763f8bb876e146100d757600080fd5b346101ca576100e536611b71565b6100ed611ec2565b60005b81518110156101955761012e7fffffffffffffffffffffffffffffffff000000000000000000000000000000006101278385611eae565b51166120a3565b1561013b576001016100f0565b610166907fffffffffffffffffffffffffffffffff0000000000000000000000000000000092611eae565b51167f19d5c79b0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6040517f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7490806101c58582611c38565b0390a1005b600080fd5b346101ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5773ffffffffffffffffffffffffffffffffffffffff61021b611b36565b610223611ec2565b1633811461029557807fffffffffffffffffffffffff0000000000000000000000000000000000000000600054161760005573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278600080a3005b7fdad89dca0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca57602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5760405180602060065491828152019060066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9060005b8181106103b1576103ad856103a181870382611a67565b60405191829182611c38565b0390f35b825484526020909301926001928301920161038a565b346101ca576103d536611b71565b6103dd611ec2565b60005b81518110156104855761041e7fffffffffffffffffffffffffffffffff000000000000000000000000000000006104178385611eae565b5116611f0d565b1561042b576001016103e0565b610456907fffffffffffffffffffffffffffffffff0000000000000000000000000000000092611eae565b51167f73281fa10000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6040517f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba190806101c58582611c38565b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5760005473ffffffffffffffffffffffffffffffffffffffff811633036105c6577fffffffffffffffffffffffff00000000000000000000000000000000000000006001549133828416176001551660005573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f02b543c60000000000000000000000000000000000000000000000000000000060005260046000fd5b346101ca5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca57610627611b36565b67ffffffffffffffff602435116101ca573660236024350112156101ca57602435600401359067ffffffffffffffff82116101ca573660248360051b81350101116101ca576044359067ffffffffffffffff82116101ca57366023830112156101ca5767ffffffffffffffff8260040135116101ca57366024836004013560061b840101116101ca5763ffffffff6005541615610c725767ffffffffffffffff6106d48160045416611d3c565b16826004013510610c485760025460405160c0810181811067ffffffffffffffff821117610c1957604052468152602081019267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168452604082019230845273ffffffffffffffffffffffffffffffffffffffff60608401921682526080830190815261076987611b59565b916107776040519384611a67565b8783526000976024803501602085015b60248360051b813501018210610a61575050509073ffffffffffffffffffffffffffffffffffffffff8095939260a0860193845260405196879567ffffffffffffffff602088019a7f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf538c526040808a01526101208901995160608a015251166080880152511660a0860152511660c08401525160e08301525160c0610100830152805180935261014082019260206101408260051b85010192019388905b8282106109c8575050506108809250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611a67565b5190208290815b83600401358310610896578480f35b60208560806108ad86886004013560248a01611ce8565b35836108c1888a6004013560248c01611ce8565b013560405191878352601b868401526040830152606082015282805260015afa156109bd5784519073ffffffffffffffffffffffffffffffffffffffff82169081156109955773ffffffffffffffffffffffffffffffffffffffff829116101561096d578552600860205260ff604086205416156109455760019290920191610887565b6004857faaaa9141000000000000000000000000000000000000000000000000000000008152fd5b6004867fbbe15e7f000000000000000000000000000000000000000000000000000000008152fd5b6004877f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d86823e3d90fd5b91936020847ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08293600195970301855287519067ffffffffffffffff8251168152608080610a238585015160a08786015260a0850190611aa8565b9367ffffffffffffffff604082015116604085015267ffffffffffffffff606082015116606085015201519101529601920192018593919492610845565b81359067ffffffffffffffff8211610c155760a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc836024350136030112610c15576040519060a0820182811067ffffffffffffffff821117610be457604052610ad060248481350101611d95565b82526044836024350101359167ffffffffffffffff8311610c115736604360243586018501011215610c115767ffffffffffffffff6024848682350101013511610be457908d9160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6024878982350101013501160193610b576040519586611a67565b60248035870182019081013580875236910160440111610be057602495602095869560a49387908a90813586018101808301359060440186850137858235010101358301015285840152610bb060648289350101611d95565b6040840152610bc460848289350101611d95565b6060840152863501013560808201528152019201919050610787565b8380fd5b60248e7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8d80fd5b8b80fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f59fa4a930000000000000000000000000000000000000000000000000000000060005260046000fd5b7face124bc0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca57610cd3611b07565b604090815190610ce38383611a67565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013660208401377fffffffffffffffffffffffffffffffff00000000000000000000000000000000610d3a83611ea1565b91169052610d46611ec2565b60005b8151811015610d8d57610d807fffffffffffffffffffffffffffffffff000000000000000000000000000000006104178385611eae565b1561042b57600101610d49565b82517f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba190806101c58582611c38565b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5760206040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf538152f35b346101ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca57610e4c611b07565b604090815190610e5c8383611a67565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013660208401377fffffffffffffffffffffffffffffffff00000000000000000000000000000000610eb383611ea1565b91169052610ebf611ec2565b60005b8151811015610f0657610ef97fffffffffffffffffffffffffffffffff000000000000000000000000000000006101278385611eae565b1561013b57600101610ec2565b82517f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7490806101c58582611c38565b346101ca5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca57600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015611068576020604491604051928380927f4d61677100000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff610fef611b36565b16600483015260243560248301525afa90811561105d57829161101a575b6020826040519015158152f35b90506020813d602011611055575b8161103560209383611a67565b810103126110515751801515810361105157602091508261100d565b5080fd5b3d9150611028565b6040513d84823e3d90fd5b6004827f0a7c4edd000000000000000000000000000000000000000000000000000000008152fd5b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5760206110c9611e44565b6040519015158152f35b346101ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5760206110c961110f611b07565b611daa565b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5760006040805161115281611a4b565b82815260606020820152015263ffffffff600554166040519061117482611a4b565b60025482526003549161118683611b59565b926111946040519485611a67565b808452600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9190602086015b82821061128057505050506020810192835267ffffffffffffffff6004541692604082019384526040519283526040602084015260a083019151604084015251906060808401528151809152602060c0840192019060005b81811061123e5750505067ffffffffffffffff8293511660808301520390f35b8251805173ffffffffffffffffffffffffffffffffffffffff16855260209081015167ffffffffffffffff16818601526040909401939092019160010161121e565b6040516040810181811067ffffffffffffffff821117610c1957600192839260209260405267ffffffffffffffff885473ffffffffffffffffffffffffffffffffffffffff8116835260a01c16838201528152019401910190926111c6565b346101ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca5760043567ffffffffffffffff81116101ca57806004018136039160607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8401126101ca5761135a611ec2565b81359081156119a457909260248201919060015b6113788486611c94565b90508110156114595761138b8486611c94565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83019183831161142a576113cc926020926113c692611ce8565b01611d27565b67ffffffffffffffff806113ef60206113c6866113e98b8d611c94565b90611ce8565b16911610156114005760010161136e565b7f448515170000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b508390856114678584611c94565b60448601915061147682611d27565b60011b6801fffffffffffffffe67fffffffffffffffe82169116810361142a576114a867ffffffffffffffff91611d3c565b161161197a57600354805b611877575060005b6114c58786611c94565b905081101561159e5773ffffffffffffffffffffffffffffffffffffffff6114f96114f4836113e98b8a611c94565b611d74565b16600052600860205260ff60406000205416611574578073ffffffffffffffffffffffffffffffffffffffff6115386114f46001946113e98c8b611c94565b1660005260086020526040600020827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055016114bb565b7f28cae27d0000000000000000000000000000000000000000000000000000000060005260046000fd5b50846115b08780959685600255611c94565b90680100000000000000008211610c195760035482600355808310611831575b50600360005260206000206000915b838310611783575050505067ffffffffffffffff6115fc83611d27565b167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000060045416176004556005549463ffffffff86169563ffffffff871461142a5763ffffffff60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000098011696879116176005557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd6040519560208752608087019560208801523591018112156101ca57016024600482013591019267ffffffffffffffff82116101ca578160061b360384136101ca578190606060408701525260a0840192906000905b80821061173057867f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c87808867ffffffffffffffff6117258a611d95565b1660608301520390a2005b90919384359073ffffffffffffffffffffffffffffffffffffffff82168092036101ca5760408160019382935267ffffffffffffffff61177260208a01611d95565b1660208201520195019201906116e7565b600160408273ffffffffffffffffffffffffffffffffffffffff6117a78495611d74565b167fffffffffffffffffffffffff00000000000000000000000000000000000000008654161785556117db60208201611d27565b7fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff000000000000000000000000000000000000000087549260a01b169116178555019201920191906115df565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9081019083015b81811061186b57506115d0565b6000815560010161185e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811161142a57600090600354111561194d57600390527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85a81015473ffffffffffffffffffffffffffffffffffffffff16600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055801561142a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01806114b3565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526032600452fd5b7f014c50200000000000000000000000000000000000000000000000000000000060005260046000fd5b7f9cf8540c0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101ca5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ca576103ad6040805190611a0f8183611a67565b600f82527f524d4e52656d6f746520312e362e300000000000000000000000000000000000602083015251918291602083526020830190611aa8565b6060810190811067ffffffffffffffff821117610c1957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610c1957604052565b919082519283825260005b848110611af25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611ab3565b600435907fffffffffffffffffffffffffffffffff00000000000000000000000000000000821682036101ca57565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101ca57565b67ffffffffffffffff8111610c195760051b60200190565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101ca576004359067ffffffffffffffff82116101ca57806023830112156101ca57816004013590611bc882611b59565b92611bd66040519485611a67565b8284526024602085019360051b8201019182116101ca57602401915b818310611bff5750505090565b82357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681036101ca57815260209283019201611bf2565b602060408183019282815284518094520192019060005b818110611c5c5750505090565b82517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016845260209384019390920191600101611c4f565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101ca570180359067ffffffffffffffff82116101ca57602001918160061b360383136101ca57565b9190811015611cf85760061b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3567ffffffffffffffff811681036101ca5790565b67ffffffffffffffff60019116019067ffffffffffffffff821161142a57565b8054821015611cf85760005260206000200190600090565b3573ffffffffffffffffffffffffffffffffffffffff811681036101ca5790565b359067ffffffffffffffff821682036101ca57565b60065415611e3e577fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600052600760205260406000205415801590611ded5790565b507f010000000000000000000000000000010000000000000000000000000000000060005260076020527f70b766b11586b6b505ed3893938b0cc6c6c98bd6f65e969ac311168d34e4f9e254151590565b50600090565b60065415611e9c577f010000000000000000000000000000010000000000000000000000000000000060005260076020527f70b766b11586b6b505ed3893938b0cc6c6c98bd6f65e969ac311168d34e4f9e254151590565b600090565b805115611cf85760200190565b8051821015611cf85760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff600154163303611ee357565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b600081815260076020526040902054801561209c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811161142a57600654907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161142a5781810361202d575b5050506006548015611ffe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611fbb816006611d5c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600655600052600760205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b61208461203e61204f936006611d5c565b90549060031b1c9283926006611d5c565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526007602052604060002055388080611f82565b5050600090565b80600052600760205260406000205415600014611e3e5760065468010000000000000000811015610c19576120e461204f8260018594016006556006611d5c565b905560065490600052600760205260406000205560019056fea164736f6c634300081a000a", -} - -var RMNRemoteABI = RMNRemoteMetaData.ABI - -var RMNRemoteBin = RMNRemoteMetaData.Bin - -func DeployRMNRemote(auth *bind.TransactOpts, backend bind.ContractBackend, localChainSelector uint64, legacyRMN common.Address) (common.Address, *types.Transaction, *RMNRemote, error) { - parsed, err := RMNRemoteMetaData.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(RMNRemoteBin), backend, localChainSelector, legacyRMN) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &RMNRemote{address: address, abi: *parsed, RMNRemoteCaller: RMNRemoteCaller{contract: contract}, RMNRemoteTransactor: RMNRemoteTransactor{contract: contract}, RMNRemoteFilterer: RMNRemoteFilterer{contract: contract}}, nil -} - -type RMNRemote struct { - address common.Address - abi abi.ABI - RMNRemoteCaller - RMNRemoteTransactor - RMNRemoteFilterer -} - -type RMNRemoteCaller struct { - contract *bind.BoundContract -} - -type RMNRemoteTransactor struct { - contract *bind.BoundContract -} - -type RMNRemoteFilterer struct { - contract *bind.BoundContract -} - -type RMNRemoteSession struct { - Contract *RMNRemote - CallOpts bind.CallOpts - TransactOpts bind.TransactOpts -} - -type RMNRemoteCallerSession struct { - Contract *RMNRemoteCaller - CallOpts bind.CallOpts -} - -type RMNRemoteTransactorSession struct { - Contract *RMNRemoteTransactor - TransactOpts bind.TransactOpts -} - -type RMNRemoteRaw struct { - Contract *RMNRemote -} - -type RMNRemoteCallerRaw struct { - Contract *RMNRemoteCaller -} - -type RMNRemoteTransactorRaw struct { - Contract *RMNRemoteTransactor -} - -func NewRMNRemote(address common.Address, backend bind.ContractBackend) (*RMNRemote, error) { - abi, err := abi.JSON(strings.NewReader(RMNRemoteABI)) - if err != nil { - return nil, err - } - contract, err := bindRMNRemote(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &RMNRemote{address: address, abi: abi, RMNRemoteCaller: RMNRemoteCaller{contract: contract}, RMNRemoteTransactor: RMNRemoteTransactor{contract: contract}, RMNRemoteFilterer: RMNRemoteFilterer{contract: contract}}, nil -} - -func NewRMNRemoteCaller(address common.Address, caller bind.ContractCaller) (*RMNRemoteCaller, error) { - contract, err := bindRMNRemote(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &RMNRemoteCaller{contract: contract}, nil -} - -func NewRMNRemoteTransactor(address common.Address, transactor bind.ContractTransactor) (*RMNRemoteTransactor, error) { - contract, err := bindRMNRemote(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &RMNRemoteTransactor{contract: contract}, nil -} - -func NewRMNRemoteFilterer(address common.Address, filterer bind.ContractFilterer) (*RMNRemoteFilterer, error) { - contract, err := bindRMNRemote(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &RMNRemoteFilterer{contract: contract}, nil -} - -func bindRMNRemote(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := RMNRemoteMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -func (_RMNRemote *RMNRemoteRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _RMNRemote.Contract.RMNRemoteCaller.contract.Call(opts, result, method, params...) -} - -func (_RMNRemote *RMNRemoteRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _RMNRemote.Contract.RMNRemoteTransactor.contract.Transfer(opts) -} - -func (_RMNRemote *RMNRemoteRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _RMNRemote.Contract.RMNRemoteTransactor.contract.Transact(opts, method, params...) -} - -func (_RMNRemote *RMNRemoteCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _RMNRemote.Contract.contract.Call(opts, result, method, params...) -} - -func (_RMNRemote *RMNRemoteTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _RMNRemote.Contract.contract.Transfer(opts) -} - -func (_RMNRemote *RMNRemoteTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _RMNRemote.Contract.contract.Transact(opts, method, params...) -} - -func (_RMNRemote *RMNRemoteCaller) GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "getCursedSubjects") - - if err != nil { - return *new([][16]byte), err - } - - out0 := *abi.ConvertType(out[0], new([][16]byte)).(*[][16]byte) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) GetCursedSubjects() ([][16]byte, error) { - return _RMNRemote.Contract.GetCursedSubjects(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCallerSession) GetCursedSubjects() ([][16]byte, error) { - return _RMNRemote.Contract.GetCursedSubjects(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCaller) GetLocalChainSelector(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "getLocalChainSelector") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) GetLocalChainSelector() (uint64, error) { - return _RMNRemote.Contract.GetLocalChainSelector(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCallerSession) GetLocalChainSelector() (uint64, error) { - return _RMNRemote.Contract.GetLocalChainSelector(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCaller) GetReportDigestHeader(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "getReportDigestHeader") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) GetReportDigestHeader() ([32]byte, error) { - return _RMNRemote.Contract.GetReportDigestHeader(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCallerSession) GetReportDigestHeader() ([32]byte, error) { - return _RMNRemote.Contract.GetReportDigestHeader(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCaller) GetVersionedConfig(opts *bind.CallOpts) (GetVersionedConfig, - - error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "getVersionedConfig") - - outstruct := new(GetVersionedConfig) - if err != nil { - return *outstruct, err - } - - outstruct.Version = *abi.ConvertType(out[0], new(uint32)).(*uint32) - outstruct.Config = *abi.ConvertType(out[1], new(RMNRemoteConfig)).(*RMNRemoteConfig) - - return *outstruct, err - -} - -func (_RMNRemote *RMNRemoteSession) GetVersionedConfig() (GetVersionedConfig, - - error) { - return _RMNRemote.Contract.GetVersionedConfig(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCallerSession) GetVersionedConfig() (GetVersionedConfig, - - error) { - return _RMNRemote.Contract.GetVersionedConfig(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCaller) IsBlessed(opts *bind.CallOpts, taggedRoot IRMNTaggedRoot) (bool, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "isBlessed", taggedRoot) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) IsBlessed(taggedRoot IRMNTaggedRoot) (bool, error) { - return _RMNRemote.Contract.IsBlessed(&_RMNRemote.CallOpts, taggedRoot) -} - -func (_RMNRemote *RMNRemoteCallerSession) IsBlessed(taggedRoot IRMNTaggedRoot) (bool, error) { - return _RMNRemote.Contract.IsBlessed(&_RMNRemote.CallOpts, taggedRoot) -} - -func (_RMNRemote *RMNRemoteCaller) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "isCursed", subject) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) IsCursed(subject [16]byte) (bool, error) { - return _RMNRemote.Contract.IsCursed(&_RMNRemote.CallOpts, subject) -} - -func (_RMNRemote *RMNRemoteCallerSession) IsCursed(subject [16]byte) (bool, error) { - return _RMNRemote.Contract.IsCursed(&_RMNRemote.CallOpts, subject) -} - -func (_RMNRemote *RMNRemoteCaller) IsCursed0(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "isCursed0") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) IsCursed0() (bool, error) { - return _RMNRemote.Contract.IsCursed0(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCallerSession) IsCursed0() (bool, error) { - return _RMNRemote.Contract.IsCursed0(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) Owner() (common.Address, error) { - return _RMNRemote.Contract.Owner(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCallerSession) Owner() (common.Address, error) { - return _RMNRemote.Contract.Owner(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "typeAndVersion") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -func (_RMNRemote *RMNRemoteSession) TypeAndVersion() (string, error) { - return _RMNRemote.Contract.TypeAndVersion(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCallerSession) TypeAndVersion() (string, error) { - return _RMNRemote.Contract.TypeAndVersion(&_RMNRemote.CallOpts) -} - -func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, offRampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { - var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "verify", offRampAddress, merkleRoots, signatures) - - if err != nil { - return err - } - - return err - -} - -func (_RMNRemote *RMNRemoteSession) Verify(offRampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { - return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offRampAddress, merkleRoots, signatures) -} - -func (_RMNRemote *RMNRemoteCallerSession) Verify(offRampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { - return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offRampAddress, merkleRoots, signatures) -} - -func (_RMNRemote *RMNRemoteTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "acceptOwnership") -} - -func (_RMNRemote *RMNRemoteSession) AcceptOwnership() (*types.Transaction, error) { - return _RMNRemote.Contract.AcceptOwnership(&_RMNRemote.TransactOpts) -} - -func (_RMNRemote *RMNRemoteTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _RMNRemote.Contract.AcceptOwnership(&_RMNRemote.TransactOpts) -} - -func (_RMNRemote *RMNRemoteTransactor) Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "curse", subject) -} - -func (_RMNRemote *RMNRemoteSession) Curse(subject [16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Curse(&_RMNRemote.TransactOpts, subject) -} - -func (_RMNRemote *RMNRemoteTransactorSession) Curse(subject [16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Curse(&_RMNRemote.TransactOpts, subject) -} - -func (_RMNRemote *RMNRemoteTransactor) Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "curse0", subjects) -} - -func (_RMNRemote *RMNRemoteSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Curse0(&_RMNRemote.TransactOpts, subjects) -} - -func (_RMNRemote *RMNRemoteTransactorSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Curse0(&_RMNRemote.TransactOpts, subjects) -} - -func (_RMNRemote *RMNRemoteTransactor) SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "setConfig", newConfig) -} - -func (_RMNRemote *RMNRemoteSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { - return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) -} - -func (_RMNRemote *RMNRemoteTransactorSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { - return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) -} - -func (_RMNRemote *RMNRemoteTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "transferOwnership", to) -} - -func (_RMNRemote *RMNRemoteSession) TransferOwnership(to common.Address) (*types.Transaction, error) { - return _RMNRemote.Contract.TransferOwnership(&_RMNRemote.TransactOpts, to) -} - -func (_RMNRemote *RMNRemoteTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { - return _RMNRemote.Contract.TransferOwnership(&_RMNRemote.TransactOpts, to) -} - -func (_RMNRemote *RMNRemoteTransactor) Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "uncurse", subject) -} - -func (_RMNRemote *RMNRemoteSession) Uncurse(subject [16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Uncurse(&_RMNRemote.TransactOpts, subject) -} - -func (_RMNRemote *RMNRemoteTransactorSession) Uncurse(subject [16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Uncurse(&_RMNRemote.TransactOpts, subject) -} - -func (_RMNRemote *RMNRemoteTransactor) Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "uncurse0", subjects) -} - -func (_RMNRemote *RMNRemoteSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Uncurse0(&_RMNRemote.TransactOpts, subjects) -} - -func (_RMNRemote *RMNRemoteTransactorSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { - return _RMNRemote.Contract.Uncurse0(&_RMNRemote.TransactOpts, subjects) -} - -type RMNRemoteConfigSetIterator struct { - Event *RMNRemoteConfigSet - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *RMNRemoteConfigSetIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(RMNRemoteConfigSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - - select { - case log := <-it.logs: - it.Event = new(RMNRemoteConfigSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -func (it *RMNRemoteConfigSetIterator) Error() error { - return it.fail -} - -func (it *RMNRemoteConfigSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type RMNRemoteConfigSet struct { - Version uint32 - Config RMNRemoteConfig - Raw types.Log -} - -func (_RMNRemote *RMNRemoteFilterer) FilterConfigSet(opts *bind.FilterOpts, version []uint32) (*RMNRemoteConfigSetIterator, error) { - - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "ConfigSet", versionRule) - if err != nil { - return nil, err - } - return &RMNRemoteConfigSetIterator{contract: _RMNRemote.contract, event: "ConfigSet", logs: logs, sub: sub}, nil -} - -func (_RMNRemote *RMNRemoteFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet, version []uint32) (event.Subscription, error) { - - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "ConfigSet", versionRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(RMNRemoteConfigSet) - if err := _RMNRemote.contract.UnpackLog(event, "ConfigSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -func (_RMNRemote *RMNRemoteFilterer) ParseConfigSet(log types.Log) (*RMNRemoteConfigSet, error) { - event := new(RMNRemoteConfigSet) - if err := _RMNRemote.contract.UnpackLog(event, "ConfigSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -type RMNRemoteCursedIterator struct { - Event *RMNRemoteCursed - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *RMNRemoteCursedIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(RMNRemoteCursed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - - select { - case log := <-it.logs: - it.Event = new(RMNRemoteCursed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -func (it *RMNRemoteCursedIterator) Error() error { - return it.fail -} - -func (it *RMNRemoteCursedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type RMNRemoteCursed struct { - Subjects [][16]byte - Raw types.Log -} - -func (_RMNRemote *RMNRemoteFilterer) FilterCursed(opts *bind.FilterOpts) (*RMNRemoteCursedIterator, error) { - - logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "Cursed") - if err != nil { - return nil, err - } - return &RMNRemoteCursedIterator{contract: _RMNRemote.contract, event: "Cursed", logs: logs, sub: sub}, nil -} - -func (_RMNRemote *RMNRemoteFilterer) WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteCursed) (event.Subscription, error) { - - logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "Cursed") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(RMNRemoteCursed) - if err := _RMNRemote.contract.UnpackLog(event, "Cursed", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -func (_RMNRemote *RMNRemoteFilterer) ParseCursed(log types.Log) (*RMNRemoteCursed, error) { - event := new(RMNRemoteCursed) - if err := _RMNRemote.contract.UnpackLog(event, "Cursed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -type RMNRemoteOwnershipTransferRequestedIterator struct { - Event *RMNRemoteOwnershipTransferRequested - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *RMNRemoteOwnershipTransferRequestedIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(RMNRemoteOwnershipTransferRequested) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - - select { - case log := <-it.logs: - it.Event = new(RMNRemoteOwnershipTransferRequested) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -func (it *RMNRemoteOwnershipTransferRequestedIterator) Error() error { - return it.fail -} - -func (it *RMNRemoteOwnershipTransferRequestedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type RMNRemoteOwnershipTransferRequested struct { - From common.Address - To common.Address - Raw types.Log -} - -func (_RMNRemote *RMNRemoteFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferRequestedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) - if err != nil { - return nil, err - } - return &RMNRemoteOwnershipTransferRequestedIterator{contract: _RMNRemote.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil -} - -func (_RMNRemote *RMNRemoteFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(RMNRemoteOwnershipTransferRequested) - if err := _RMNRemote.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -func (_RMNRemote *RMNRemoteFilterer) ParseOwnershipTransferRequested(log types.Log) (*RMNRemoteOwnershipTransferRequested, error) { - event := new(RMNRemoteOwnershipTransferRequested) - if err := _RMNRemote.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -type RMNRemoteOwnershipTransferredIterator struct { - Event *RMNRemoteOwnershipTransferred - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *RMNRemoteOwnershipTransferredIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(RMNRemoteOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - - select { - case log := <-it.logs: - it.Event = new(RMNRemoteOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -func (it *RMNRemoteOwnershipTransferredIterator) Error() error { - return it.fail -} - -func (it *RMNRemoteOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type RMNRemoteOwnershipTransferred struct { - From common.Address - To common.Address - Raw types.Log -} - -func (_RMNRemote *RMNRemoteFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferredIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) - if err != nil { - return nil, err - } - return &RMNRemoteOwnershipTransferredIterator{contract: _RMNRemote.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -func (_RMNRemote *RMNRemoteFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(RMNRemoteOwnershipTransferred) - if err := _RMNRemote.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -func (_RMNRemote *RMNRemoteFilterer) ParseOwnershipTransferred(log types.Log) (*RMNRemoteOwnershipTransferred, error) { - event := new(RMNRemoteOwnershipTransferred) - if err := _RMNRemote.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -type RMNRemoteUncursedIterator struct { - Event *RMNRemoteUncursed - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *RMNRemoteUncursedIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(RMNRemoteUncursed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - - select { - case log := <-it.logs: - it.Event = new(RMNRemoteUncursed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -func (it *RMNRemoteUncursedIterator) Error() error { - return it.fail -} - -func (it *RMNRemoteUncursedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type RMNRemoteUncursed struct { - Subjects [][16]byte - Raw types.Log -} - -func (_RMNRemote *RMNRemoteFilterer) FilterUncursed(opts *bind.FilterOpts) (*RMNRemoteUncursedIterator, error) { - - logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "Uncursed") - if err != nil { - return nil, err - } - return &RMNRemoteUncursedIterator{contract: _RMNRemote.contract, event: "Uncursed", logs: logs, sub: sub}, nil -} - -func (_RMNRemote *RMNRemoteFilterer) WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteUncursed) (event.Subscription, error) { - - logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "Uncursed") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(RMNRemoteUncursed) - if err := _RMNRemote.contract.UnpackLog(event, "Uncursed", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -func (_RMNRemote *RMNRemoteFilterer) ParseUncursed(log types.Log) (*RMNRemoteUncursed, error) { - event := new(RMNRemoteUncursed) - if err := _RMNRemote.contract.UnpackLog(event, "Uncursed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -type GetVersionedConfig struct { - Version uint32 - Config RMNRemoteConfig -} - -func (RMNRemoteConfigSet) Topic() common.Hash { - return common.HexToHash("0x7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c") -} - -func (RMNRemoteCursed) Topic() common.Hash { - return common.HexToHash("0x1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f74") -} - -func (RMNRemoteOwnershipTransferRequested) Topic() common.Hash { - return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") -} - -func (RMNRemoteOwnershipTransferred) Topic() common.Hash { - return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") -} - -func (RMNRemoteUncursed) Topic() common.Hash { - return common.HexToHash("0x0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba1") -} - -func (_RMNRemote *RMNRemote) Address() common.Address { - return _RMNRemote.address -} - -type RMNRemoteInterface interface { - GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) - - GetLocalChainSelector(opts *bind.CallOpts) (uint64, error) - - GetReportDigestHeader(opts *bind.CallOpts) ([32]byte, error) - - GetVersionedConfig(opts *bind.CallOpts) (GetVersionedConfig, - - error) - - IsBlessed(opts *bind.CallOpts, taggedRoot IRMNTaggedRoot) (bool, error) - - IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) - - IsCursed0(opts *bind.CallOpts) (bool, error) - - Owner(opts *bind.CallOpts) (common.Address, error) - - TypeAndVersion(opts *bind.CallOpts) (string, error) - - Verify(opts *bind.CallOpts, offRampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error - - AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) - - Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) - - Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) - - SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) - - TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) - - Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) - - Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) - - FilterConfigSet(opts *bind.FilterOpts, version []uint32) (*RMNRemoteConfigSetIterator, error) - - WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet, version []uint32) (event.Subscription, error) - - ParseConfigSet(log types.Log) (*RMNRemoteConfigSet, error) - - FilterCursed(opts *bind.FilterOpts) (*RMNRemoteCursedIterator, error) - - WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteCursed) (event.Subscription, error) - - ParseCursed(log types.Log) (*RMNRemoteCursed, error) - - FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferRequestedIterator, error) - - WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) - - ParseOwnershipTransferRequested(log types.Log) (*RMNRemoteOwnershipTransferRequested, error) - - FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferredIterator, error) - - WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) - - ParseOwnershipTransferred(log types.Log) (*RMNRemoteOwnershipTransferred, error) - - FilterUncursed(opts *bind.FilterOpts) (*RMNRemoteUncursedIterator, error) - - WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteUncursed) (event.Subscription, error) - - ParseUncursed(log types.Log) (*RMNRemoteUncursed, error) - - Address() common.Address -} diff --git a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 404c03313e..edfaed5cb5 100644 --- a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -30,13 +30,14 @@ mock_receiver_v2: ../solc/ccip/MockReceiverV2/MockReceiverV2.sol/MockReceiverV2. mock_usdc_token_messenger: ../solc/ccip/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.sol/MockE2EUSDCTokenMessenger.abi.json ../solc/ccip/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.sol/MockE2EUSDCTokenMessenger.bin ea2316cb9cf540ff2a377d7e28ba0cc5b6cd54a758b1c8158c4bb48c9d4e2701 mock_usdc_token_transmitter: ../solc/ccip/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.sol/MockE2EUSDCTransmitter.abi.json ../solc/ccip/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.sol/MockE2EUSDCTransmitter.bin ae0d090105bc248f4eccd337836ec1db760c506d6f5578e662305abbbc520fcd mock_usdc_token_transmitter_v2: ../solc/ccip/MockE2EUSDCTransmitterCCTPV2/MockE2EUSDCTransmitterCCTPV2.sol/MockE2EUSDCTransmitterCCTPV2.abi.json ../solc/ccip/MockE2EUSDCTransmitterCCTPV2/MockE2EUSDCTransmitterCCTPV2.sol/MockE2EUSDCTransmitterCCTPV2.bin a5e67610d216e04bbe47808d28f165e5c0f7bea9dee75f46bee28070024858ae -offramp: ../solc/ccip/OffRamp/OffRamp.sol/OffRamp.abi.json ../solc/ccip/OffRamp/OffRamp.sol/OffRamp.bin 041d43dce7950d24cfc3daa9b43bcfd9ba81484e671ef03b0f0d14888e1d841d -onramp: ../solc/ccip/OnRamp/OnRamp.sol/OnRamp.abi.json ../solc/ccip/OnRamp/OnRamp.sol/OnRamp.bin 21e7f9dc30c3411fbd0c966ac566912b6a36533b4c7b3ba23838a6ba82c767b7 +offramp: ../solc/ccip/OffRamp/OffRamp.sol/OffRamp.abi.json ../solc/ccip/OffRamp/OffRamp.sol/OffRamp.bin dedd49f3cfa686f485b6a089364cb0bf71d2d2b293deef1b4a97dc1b2d35a52f +onramp: ../solc/ccip/OnRamp/OnRamp.sol/OnRamp.abi.json ../solc/ccip/OnRamp/OnRamp.sol/OnRamp.bin 57d002b17905ee483ce876c02041ee3a0a32f5ab4fc2f2fee847d94e1635a382 ping_pong_demo: ../solc/ccip/PingPongDemo/PingPongDemo.sol/PingPongDemo.abi.json ../solc/ccip/PingPongDemo/PingPongDemo.sol/PingPongDemo.bin e192d15c42dc8655806b487a4abeeb60f59f7d1d4f3a8b0a63052565d4afe039 proxy: ../solc/ccip/Proxy/Proxy.sol/Proxy.abi.json ../solc/ccip/Proxy/Proxy.sol/Proxy.bin 96c64564909933986584e28f07ffeacd26a07be2b329145e93b3f85d59e4102a registry_module_owner_custom: ../solc/ccip/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.sol/RegistryModuleOwnerCustom.abi.json ../solc/ccip/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.sol/RegistryModuleOwnerCustom.bin ce04722cdea2e96d791e48c6a99f64559125d34cd24e19cfd5281892d2ed8ef0 +rmn: ../solc/ccip/RMN/RMN.sol/RMN.abi.json ../solc/ccip/RMN/RMN.sol/RMN.bin 471d245f1744018175826c5f26203a1749db596833d386347c8405e93e1a7fb5 rmn_proxy_contract: ../solc/ccip/RMNProxy/RMNProxy.sol/RMNProxy.abi.json ../solc/ccip/RMNProxy/RMNProxy.sol/RMNProxy.bin 4d06f9e5c6f72daef745e6114faed3bae57ad29758d75de5a4eefcd5f0172328 -rmn_remote: ../solc/ccip/RMNRemote/RMNRemote.sol/RMNRemote.abi.json ../solc/ccip/RMNRemote/RMNRemote.sol/RMNRemote.bin e345511af2c05588a6875c9c5cc728732e8728e76217caa3de3966b0051b0ad2 +rmn_remote: ../solc/ccip/RMNRemote/RMNRemote.sol/RMNRemote.abi.json ../solc/ccip/RMNRemote/RMNRemote.sol/RMNRemote.bin a09407e77c5b8655f55554c020d4086aea22e542cc333306138fe6caff6748bb router: ../solc/ccip/Router/Router.sol/Router.abi.json ../solc/ccip/Router/Router.sol/Router.bin 4048d8be7531670b5e054b7dc18aa8394f2b6dd44fd7fff83aa0cb4aeb38e926 siloed_lock_release_token_pool: ../solc/ccip/SiloedLockReleaseTokenPool/SiloedLockReleaseTokenPool.sol/SiloedLockReleaseTokenPool.abi.json ../solc/ccip/SiloedLockReleaseTokenPool/SiloedLockReleaseTokenPool.sol/SiloedLockReleaseTokenPool.bin c44cb19b792d0a9de3992611fd85a3f9e62ddd8a8db05ba7afecbd85a785aa39 siloed_usdc_token_pool: ../solc/ccip/SiloedUSDCTokenPool/SiloedUSDCTokenPool.sol/SiloedUSDCTokenPool.abi.json ../solc/ccip/SiloedUSDCTokenPool/SiloedUSDCTokenPool.sol/SiloedUSDCTokenPool.bin db8e8f6d11e52a6df53e8986ba1df9a778b8c303fb01aff92d85981c73f1d9fe diff --git a/chains/evm/gobindings/go_generate.go b/chains/evm/gobindings/go_generate.go index 8b8e9f5960..8fa66cd496 100644 --- a/chains/evm/gobindings/go_generate.go +++ b/chains/evm/gobindings/go_generate.go @@ -14,7 +14,7 @@ package ccip //go:generate go run ./wrap ccip TokenAdminRegistry token_admin_registry //go:generate go run ./wrap ccip RegistryModuleOwnerCustom registry_module_owner_custom //go:generate go run ./wrap ccip RMNProxy rmn_proxy_contract -//go:generate go run ./wrap ccip RMNRemote rmn_remote +//go:generate go run ./wrap ccip RMN rmn //go:generate go run ./wrap ccip EtherSenderReceiver ether_sender_receiver // Skip these for ZKSync as it doesn't support the create2 opcode diff --git a/chains/evm/scripts/compile_all b/chains/evm/scripts/compile_all index a335e02a46..065a7349c2 100755 --- a/chains/evm/scripts/compile_all +++ b/chains/evm/scripts/compile_all @@ -102,7 +102,7 @@ compileContract applications/EtherSenderReceiver compileContract Router compileContract tokenAdminRegistry/TokenAdminRegistry compileContract tokenAdminRegistry/RegistryModuleOwnerCustom -compileContract rmn/RMNRemote +compileContract rmn/RMN compileContract rmn/RMNProxy if [ "$ZKSYNC" != "true" ]; then