From 094bdc51758e36eb3705355c618d90a49daf07a5 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Wed, 2 Oct 2024 20:53:11 +0530 Subject: [PATCH] adding chain selector return value Signed-off-by: 0xsuryansh --- contracts/gas-snapshots/ccip.gas-snapshot | 26 +++++++++---------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 8 +++--- .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 4 +-- .../ccip/generated/offramp/offramp.go | 19 +++++++------- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 5 files changed, 31 insertions(+), 28 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 22c0109430..184e2a2b91 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -610,7 +610,7 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51689) OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23511) OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39707) OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20584) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5869456) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5915989) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626169) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166511) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16763) @@ -634,8 +634,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64099) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68173) OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6630247) -OffRamp_commit:test_NoConfig_Revert() (gas: 6213919) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6676780) +OffRamp_commit:test_NoConfig_Revert() (gas: 6260452) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113042) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121403) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113063) @@ -649,23 +649,23 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125409) OffRamp_commit:test_Unhealthy_Revert() (gas: 58633) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206778) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 6175874) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 182772) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103307) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101201) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 228198) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101121) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101159) +OffRamp_constructor:test_Constructor_Success() (gas: 6221879) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 182841) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103375) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101269) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 228266) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101189) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101227) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) OffRamp_execute:test_LargeBatch_Success() (gas: 3425675) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372967) OffRamp_execute:test_MultipleReports_Success() (gas: 300913) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7039120) -OffRamp_execute:test_NoConfig_Revert() (gas: 6263595) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7085653) +OffRamp_execute:test_NoConfig_Revert() (gas: 6310128) OffRamp_execute:test_NonArray_Revert() (gas: 27562) OffRamp_execute:test_SingleReport_Success() (gas: 176332) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148350) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7041869) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7088402) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244057) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 4a3ca2e752..49a085d7ff 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -926,12 +926,14 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { /// @notice Returns all source chain configs /// @return sourceChainConfigs The source chain configs corresponding to all the supported chain selectors - function getAllSourceChainConfig() external view returns (SourceChainConfig[] memory) { + function getAllSourceChainConfig() external view returns (uint64[] memory, SourceChainConfig[] memory) { SourceChainConfig[] memory sourceChainConfigs = new SourceChainConfig[](s_sourceChainSelectors.length()); + uint64[] memory sourceChainSelectors = new uint64[](s_sourceChainSelectors.length()); for (uint256 i = 0; i < s_sourceChainSelectors.length(); ++i) { - sourceChainConfigs[i] = s_sourceChainConfigs[uint64(s_sourceChainSelectors.at(i))]; + sourceChainSelectors[i] = uint64(s_sourceChainSelectors.at(i)); + sourceChainConfigs[i] = s_sourceChainConfigs[sourceChainSelectors[i]]; } - return sourceChainConfigs; + return (sourceChainSelectors, sourceChainConfigs); } /// @notice Updates source configs diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol index 6b5797f58c..d68308e528 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -127,7 +127,8 @@ contract OffRamp_constructor is OffRampSetup { MultiOCR3Base.OCRConfig memory gotOCRConfig = s_offRamp.latestConfigDetails(uint8(Internal.OCRPluginType.Execution)); _assertOCRConfigEquality(expectedOCRConfig, gotOCRConfig); - OffRamp.SourceChainConfig[] memory actualSourceChainConfigs = s_offRamp.getAllSourceChainConfig(); + (uint64[] memory actualSourceChainSelectors, OffRamp.SourceChainConfig[] memory actualSourceChainConfigs) = + s_offRamp.getAllSourceChainConfig(); _assertSourceChainConfigEquality(actualSourceChainConfigs[0], expectedSourceChainConfig1); _assertSourceChainConfigEquality(actualSourceChainConfigs[1], expectedSourceChainConfig2); @@ -137,7 +138,6 @@ contract OffRamp_constructor is OffRampSetup { assertEq(OWNER, s_offRamp.owner()); assertEq(0, s_offRamp.getLatestPriceSequenceNumber()); - uint256[] memory actualSourceChainSelectors = s_offRamp.getSourceChainSelectors(); // assertion for source chain selector for (uint256 i = 0; i < expectedSourceChainSelectors.length; i++) { assertEq(expectedSourceChainSelectors[i], actualSourceChainSelectors[i]); diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 6cfdad978d..6f79d8fdfd 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -154,8 +154,8 @@ type OffRampStaticConfig struct { } var OffRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162006b6938038062006b69833981016040819052620000359162000886565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d1576000828281518110620003915762000391620009c3565b60209081029190910181015190810151909150620003ba60066001600160401b038316620005d5565b50806001600160401b0316600003620003e65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200040f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200043d90620009d9565b9050600003620004a0578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004df565b8154600160a81b90046001600160401b0316600114620004df57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005155750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000544828262000a6a565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005b990859062000b36565b60405180910390a25050505080600101905062000370565b5050565b6000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b80516001600160401b0381168114620006ca57600080fd5b919050565b6001600160a01b0381168114620006e557600080fd5b50565b6000601f83601f840112620006fc57600080fd5b825160206001600160401b03808311156200071b576200071b6200063e565b8260051b6200072c8382016200067f565b93845286810183019383810190898611156200074757600080fd5b84890192505b858310156200087957825184811115620007675760008081fd5b89016080601f19828d038101821315620007815760008081fd5b6200078b62000654565b888401516200079a81620006cf565b81526040620007ab858201620006b2565b8a8301526060808601518015158114620007c55760008081fd5b83830152938501519389851115620007dd5760008081fd5b84860195508f603f870112620007f557600094508485fd5b8a8601519450898511156200080e576200080e6200063e565b6200081f8b858f880116016200067f565b93508484528f82868801011115620008375760008081fd5b60005b8581101562000857578681018301518582018d01528b016200083a565b5060009484018b0194909452509182015283525091840191908401906200074d565b9998505050505050505050565b60008060008385036101008112156200089e57600080fd5b6080811215620008ad57600080fd5b620008b762000654565b620008c286620006b2565b81526020860151620008d481620006cf565b60208201526040860151620008e981620006cf565b60408201526060860151620008fe81620006cf565b606082810191909152909450607f19820112156200091b57600080fd5b50604051606081016001600160401b0380821183831017156200094257620009426200063e565b81604052608087015191506200095882620006cf565b90825260a08601519063ffffffff821682146200097457600080fd5b81602084015260c087015191506200098c82620006cf565b6040830182905260e087015192945080831115620009a957600080fd5b5050620009b986828701620006e8565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ee57607f821691505b60208210810362000a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a65576000816000526020600020601f850160051c8101602086101562000a405750805b601f850160051c820191505b8181101562000a615782815560010162000a4c565b5050505b505050565b81516001600160401b0381111562000a865762000a866200063e565b62000a9e8162000a978454620009d9565b8462000a15565b602080601f83116001811462000ad6576000841562000abd5750858301515b600019600386901b1c1916600185901b17855562000a61565b600085815260208120601f198616915b8281101562000b075788860151825594840194600190910190840162000ae6565b508582101562000b265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8b81620009d9565b8060a089015260c0600183166000811462000baf576001811462000bcc5762000bfe565b60ff19841660c08b015260c083151560051b8b0101945062000bfe565b85600052602060002060005b8481101562000bf55781548c820185015290880190890162000bd8565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ee662000c83600039600081816102470152612bfc0152600081816102180152612ec10152600081816101e9015281816105880152818161073a01526125bd0152600081816101ba01526127fc015260008181611ccc0152611cff0152615ee66000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ec578063f2fde38b1461050c578063f716f99f1461051f57600080fd5b8063c673e58414610488578063ccd37ba3146104a857600080fd5b806383503786116100b2578063835037861461044a57806385572ffb1461045f5780638da5cb5b1461046d57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613e40565b610532565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190613fae565b61018461032436600461405e565b610546565b610184610337366004614110565b610a4d565b600b546040516001600160401b0390911681526020016102c4565b61036a610365366004614163565b610ab6565b6040516102c491906141c0565b610184610385366004614729565b610b0b565b61018461039836600461496d565b610d9a565b6101846103ab366004614a01565b61107a565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108b565b61045261113c565b6040516102c49190614ab7565b61018461016c366004614b1b565b6000546040516001600160a01b0390911681526020016102c4565b61049b610496366004614b66565b6112f3565b6040516102c49190614bc6565b6104de6104b6366004614c3b565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6104ff6104fa366004614c65565b611451565b6040516102c49190614c80565b61018461051a366004614c93565b61155d565b61018461052d366004614d18565b61156e565b61053a6115b0565b6105438161160c565b50565b60006105548789018961506d565b602081015151909150156105f157602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c09330939091906004016152a2565b60006040518083038186803b1580156105d857600080fd5b505afa1580156105ec573d6000803e3d6000fd5b505050505b8051515115158061060757508051602001515115155b156106d357600b5460208a0135906001600160401b03808316911610156106ab57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106749291016153ef565b600060405180830381600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b505050506106d1565b8160200151516000036106d157604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098e576000826020015182815181106106fb576106fb61531d565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a59190615402565b156107d357604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107de8261187d565b9050806001016040516107f19190615453565b60405180910390208360200151805190602001201461082e5782602001518160010160405163b80d8fa960e01b81526004016107ca929190615546565b60408301518154600160a81b90046001600160401b03908116911614158061086f575082606001516001600160401b031683604001516001600160401b0316115b156108b457825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107ca565b6080830151806108d75760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561092f5783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107ca565b606084015161093f906001615581565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d6565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c69290916155a8565b60405180910390a1610a4260008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506118c9915050565b505050505050505050565b610a8d610a5c828401846155cd565b6040805160008082526020820190925290610a87565b6060815260200190600190039081610a725790505b50611bc2565b604080516000808252602082019092529050610ab06001858585858660006118c9565b50505050565b6000610ac460016004615601565b6002610ad160808561562a565b6001600160401b0316610ae49190615650565b610aee8585611c84565b901c166003811115610b0257610b02614196565b90505b92915050565b610b13611cc9565b815181518114610b36576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8a576000848281518110610b5557610b5561531d565b60200260200101519050600081602001515190506000858481518110610b7d57610b7d61531d565b6020026020010151905080518214610ba8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7b576000828281518110610bc757610bc761531d565b6020026020010151600001519050600085602001518381518110610bed57610bed61531d565b6020026020010151905081600014610c41578060800151821015610c41578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107ca565b838381518110610c5357610c5361531d565b602002602001015160200151518160a001515114610ca057805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107ca565b60005b8160a0015151811015610d6d576000858581518110610cc457610cc461531d565b6020026020010151602001518281518110610ce157610ce161531d565b602002602001015163ffffffff16905080600014610d645760008360a001518381518110610d1157610d1161531d565b60200260200101516040015163ffffffff16905080821015610d62578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107ca565b505b50600101610ca3565b505050806001019050610bab565b50505050806001019050610b39565b50610d958383611bc2565b505050565b333014610dba576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df7565b6040805180820190915260008082526020820152815260200190600190039081610dd05790505b5060a08701515190915015610e2d57610e2a8660a001518760200151886060015189600001516020015189898989611d31565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e68929101613fae565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f43576040516308d450a160e01b81526001600160a01b038216906308d450a190610ec9908590600401615708565b600060405180830381600087803b158015610ee357600080fd5b505af1925050508015610ef4575060015b610f43573d808015610f22576040519150601f19603f3d011682016040523d82523d6000602084013e610f27565b606091505b50806040516309c2532560e01b81526004016107ca9190613fae565b604088015151158015610f5857506080880151155b80610f6f575060608801516001600160a01b03163b155b80610f9657506060880151610f94906001600160a01b03166385572ffb60e01b611ee2565b155b15610fa357505050611073565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392611001928992611388929160040161571b565b6000604051808303816000875af1158015611020573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110489190810190615757565b50915091508161106d57806040516302a35ba360e21b81526004016107ca9190613fae565b50505050505b5050505050565b6110826115b0565b61054381611efe565b6001546001600160a01b031633146110e55760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107ca565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6060600061114a6006611fdd565b6001600160401b0381111561116157611161613c82565b6040519080825280602002602001820160405280156111b257816020015b604080516080810182526000808252602080830182905292820152606080820152825260001990920191018161117f5790505b50905060005b6111c26006611fdd565b8110156112ed57600860006111d8600684611fe7565b6001600160401b0390811682526020808301939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151595820195909552600160a81b909404909116918301919091526001810180546060840191906112469061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546112729061541f565b80156112bf5780601f10611294576101008083540402835291602001916112bf565b820191906000526020600020905b8154815290600101906020018083116112a257829003601f168201915b5050505050815250508282815181106112da576112da61531d565b60209081029190910101526001016111b8565b50919050565b6113366040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c0820152948552918201805484518184028101840190955280855292938583019390928301828280156113df57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113c1575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561144157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611423575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916114dd9061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546115099061541f565b80156114415780601f1061152b57610100808354040283529160200191611441565b820191906000526020600020905b81548152906001019060200180831161153957505050919092525091949350505050565b6115656115b0565b61054381611ff3565b6115766115b0565b60005b81518110156115ac576115a48282815181106115975761159761531d565b602002602001015161209c565b600101611579565b5050565b6000546001600160a01b0316331461160a5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107ca565b565b60005b81518110156115ac57600082828151811061162c5761162c61531d565b6020026020010151905060008160200151905061165c816001600160401b031660066123c690919063ffffffff16565b50806001600160401b03166000036116875760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116af576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546116db9061541f565b905060000361173d57815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161177a565b8154600160a81b90046001600160401b031660011461177a57604051632105803760e11b81526001600160401b03841660048201526024016107ca565b805115806117af5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156117cd576040516342bcdf7f60e11b815260040160405180910390fd5b600182016117db828261583c565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906118669085906158fb565b60405180910390a25050505080600101905061160f565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b055760405163ed053c5960e01b81526001600160401b03841660048201526024016107ca565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119288760a4615949565b9050826060015115611970578451611941906020615650565b865161194e906020615650565b6119599060a0615949565b6119639190615949565b61196d9082615949565b90505b36811461199957604051638e1192e160e01b8152600481018290523660248201526044016107ca565b50815181146119c85781516040516324f7d61360e21b81526004810191909152602481018290526044016107ca565b6119d0611cc9565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611a1e57611a1e614196565b6002811115611a2f57611a2f614196565b9052509050600281602001516002811115611a4c57611a4c614196565b148015611aa05750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611a8857611a8861531d565b6000918252602090912001546001600160a01b031633145b611abd57604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611b6d576020820151611ad890600161595c565b60ff16855114611afb576040516371253a2560e01b815260040160405180910390fd5b8351855114611b1d5760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611b2f929190615975565b604051908190038120611b46918b90602001615985565b604051602081830303815290604052805190602001209050611b6b8a828888886123d2565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611be35760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611c26565b604080518082019091526000815260606020820152815260200190600190039081611bfe5790505b50905060005b845181101561107357611c7c858281518110611c4a57611c4a61531d565b602002602001015184611c7657858381518110611c6957611c6961531d565b602002602001015161258f565b8361258f565b600101611c2c565b6001600160401b038216600090815260096020526040812081611ca8608085615999565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461160a57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107ca565b606088516001600160401b03811115611d4c57611d4c613c82565b604051908082528060200260200182016040528015611d9157816020015b6040805180820190915260008082526020820152815260200190600190039081611d6a5790505b509050811560005b8a51811015611ed45781611e3157848482818110611db957611db961531d565b9050602002016020810190611dce91906159bf565b63ffffffff1615611e3157848482818110611deb57611deb61531d565b9050602002016020810190611e0091906159bf565b8b8281518110611e1257611e1261531d565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611eaf8b8281518110611e4657611e4661531d565b60200260200101518b8b8b8b8b87818110611e6357611e6361531d565b9050602002810190611e7591906159da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8692505050565b838281518110611ec157611ec161531d565b6020908102919091010152600101611d99565b505098975050505050505050565b6000611eed83613166565b8015610b025750610b0283836131b1565b80516001600160a01b0316611f26576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b05825490565b6000610b028383613253565b336001600160a01b0382160361204b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107ca565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036120c7576000604051631b3fab5160e11b81526004016107ca9190615a20565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003612118576060840151600182018054911515620100000262ff000019909216919091179055612154565b6060840151600182015460ff6201000090910416151590151514612154576040516321fd80df60e21b815260ff841660048201526024016107ca565b60a084015180516101001015612180576001604051631b3fab5160e11b81526004016107ca9190615a20565b80516000036121a5576005604051631b3fab5160e11b81526004016107ca9190615a20565b61220b848460030180548060200260200160405190810160405280929190818152602001828054801561220157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121e3575b505050505061327d565b84606001511561233b576122798484600201805480602002602001604051908101604052809291908181526020018280548015612201576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121e357505050505061327d565b6080850151805161010010156122a5576002604051631b3fab5160e11b81526004016107ca9190615a20565b60408601516122b5906003615a3a565b60ff168151116122db576003604051631b3fab5160e11b81526004016107ca9190615a20565b815181511015612301576001604051631b3fab5160e11b81526004016107ca9190615a20565b805160018401805461ff00191661010060ff84160217905561232c9060028601906020840190613c08565b50612339858260016132e6565b505b612347848260026132e6565b805161235c9060038501906020840190613c08565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936123b59389939260028a01929190615a56565b60405180910390a161107384613441565b6000610b028383613498565b8251600090815b818110156125855760006001888684602081106123f8576123f861531d565b61240591901a601b61595c565b8985815181106124175761241761531d565b60200260200101518986815181106124315761243161531d565b60200260200101516040516000815260200160405260405161246f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612491573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156124f2576124f2614196565b600281111561250357612503614196565b905250905060018160200151600281111561252057612520614196565b1461253e57604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561256857604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506123d9565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561260c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126309190615402565b156126a157801561265f57604051637edeb53960e11b81526001600160401b03831660048201526024016107ca565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60006126ac8361187d565b60010180546126ba9061541f565b80601f01602080910402602001604051908101604052809291908181526020018280546126e69061541f565b80156127335780601f1061270857610100808354040283529160200191612733565b820191906000526020600020905b81548152906001019060200180831161271657829003601f168201915b505050602088015151929350505060008190036127625760405162bf199760e01b815260040160405180910390fd5b8560400151518114612787576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156127a1576127a1613c82565b6040519080825280602002602001820160405280156127ca578160200160208202803683370190505b50905060005b8281101561296e576000886020015182815181106127f0576127f061531d565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146128675780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107ca565b866001600160401b03168160000151602001516001600160401b0316146128bb57805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107ca565b612948817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f836000015160200151846000015160400151898051906020012060405160200161292d94939291909384526001600160401b03928316602085015291166040830152606082015260800190565b604051602081830303815290604052805190602001206134e7565b83838151811061295a5761295a61531d565b6020908102919091010152506001016127d0565b50600061298586838a606001518b608001516135ef565b9050806000036129b357604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107ca565b60005b83811015610a425760005a905060008a6020015183815181106129db576129db61531d565b6020026020010151905060006129f98a836000015160600151610ab6565b90506000816003811115612a0f57612a0f614196565b1480612a2c57506003816003811115612a2a57612a2a614196565b145b612a8257815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612e7e565b60608915612b61578b8581518110612a9c57612a9c61531d565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612aca8842615601565b1190508080612aea57506003836003811115612ae857612ae8614196565b145b612b12576040516354e7e43160e11b81526001600160401b038d1660048201526024016107ca565b8c8681518110612b2457612b2461531d565b602002602001015160000151600014612b5b578c8681518110612b4957612b4961531d565b60209081029190910101515160808501525b50612bcd565b6000826003811115612b7557612b75614196565b14612bcd57825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612e7e565b8251608001516001600160401b031615612ca6576000826003811115612bf557612bf5614196565b03612ca6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612c5693929190615b08565b6020604051808303816000875af1158015612c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c999190615402565b612ca65750505050612e7e565b60008d604001518681518110612cbe57612cbe61531d565b6020026020010151905080518460a001515114612d0857835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107ca565b612d1c8c856000015160600151600161362c565b600080612d2a8684866136d1565b91509150612d418e8760000151606001518461362c565b8c15612d98576003826003811115612d5b57612d5b614196565b03612d98576000856003811115612d7457612d74614196565b14612d9857855151604051632b11b8d960e01b81526107ca91908390600401615b34565b6002826003811115612dac57612dac614196565b14612df1576003826003811115612dc557612dc5614196565b14612df1578d866000015160600151836040516349362d1f60e11b81526004016107ca93929190615b4d565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612e4957612e4961531d565b602002602001015186865a612e5e908f615601565b604051612e6e9493929190615b72565b60405180910390a4505050505050505b6001016129b6565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2e9190615ba9565b90506001600160a01b0381161580612f5d5750612f5b6001600160a01b03821663aff2afbf60e01b611ee2565b155b15612f865760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107ca565b600080612f9e88858c6040015163ffffffff16613785565b9150915060008060006130516040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b81525060405160240161301b9190615bc6565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613868565b92509250925082613077578160405163e1cd550960e01b81526004016107ca9190613fae565b81516020146130a6578151604051631e3be00960e21b81526020600482015260248101919091526044016107ca565b6000828060200190518101906130bc9190615c92565b9050866001600160a01b03168c6001600160a01b0316146131385760006130ed8d8a6130e8868a615601565b613785565b509050868110806131075750816131048883615601565b14155b156131365760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107ca565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613179826301ffc9a760e01b6131b1565b8015610b0557506131aa827fffffffff000000000000000000000000000000000000000000000000000000006131b1565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d9150600051905082801561323c575060208210155b80156132485750600081115b979650505050505050565b600082600001828154811061326a5761326a61531d565b9060005260206000200154905092915050565b60005b8151811015610d955760ff8316600090815260036020526040812083519091908490849081106132b2576132b261531d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613280565b60005b8251811015610ab05760008382815181106133065761330661531d565b602002602001015190506000600281111561332357613323614196565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561336257613362614196565b14613383576004604051631b3fab5160e11b81526004016107ca9190615a20565b6001600160a01b0381166133aa5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133d0576133d0614196565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561342d5761342d614196565b0217905550905050508060010190506132e9565b60ff81166105435760ff8082166000908152600260205260409020600101546201000090041661348457604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b60008181526001830160205260408120546134df57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b05565b506000610b05565b81518051606080850151908301516080808701519401516040516000958695889561354b95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a0015160405160200161358e9190615d4c565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806135fd858585613942565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b6000600261363b60808561562a565b6001600160401b031661364e9190615650565b9050600061365c8585611c84565b90508161366b60016004615601565b901b19168183600381111561368257613682614196565b6001600160401b03871660009081526009602052604081209190921b929092179182916136b0608088615999565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906136fe90889088908890600401615de3565b600060405180830381600087803b15801561371857600080fd5b505af1925050508015613729575060015b613768573d808015613757576040519150601f19603f3d011682016040523d82523d6000602084013e61375c565b606091505b5060039250905061377d565b50506040805160208101909152600081526002905b935093915050565b60008060008060006137e6886040516024016137b091906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613868565b9250925092508261380c578160405163e1cd550960e01b81526004016107ca9190613fae565b602082511461383b578151604051631e3be00960e21b81526020600482015260248101919091526044016107ca565b8180602001905181019061384f9190615c92565b6138598288615601565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561388a5761388a613c82565b6040519080825280601f01601f1916602001820160405280156138b4576020820181803683370190505b509150863b6138ce5763030ed58f60e21b60005260046000fd5b5a858110156138e857632be8ca8b60e21b60005260046000fd5b8590036040810481038710613908576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d8481111561392b5750835b808352806000602085013e50955095509592505050565b825182516000919081830361396a57604051630469ac9960e21b815260040160405180910390fd5b610101821180159061397e57506101018111155b61399b576040516309bde33960e01b815260040160405180910390fd5b600019828201016101008111156139c5576040516309bde33960e01b815260040160405180910390fd5b806000036139f257866000815181106139e0576139e061531d565b60200260200101519350505050613bc0565b6000816001600160401b03811115613a0c57613a0c613c82565b604051908082528060200260200182016040528015613a35578160200160208202803683370190505b50905060008080805b85811015613b5f5760006001821b8b811603613a995788851015613a82578c5160018601958e918110613a7357613a7361531d565b60200260200101519050613abb565b8551600185019487918110613a7357613a7361531d565b8b5160018401938d918110613ab057613ab061531d565b602002602001015190505b600089861015613aeb578d5160018701968f918110613adc57613adc61531d565b60200260200101519050613b0d565b8651600186019588918110613b0257613b0261531d565b602002602001015190505b82851115613b2e576040516309bde33960e01b815260040160405180910390fd5b613b388282613bc7565b878481518110613b4a57613b4a61531d565b60209081029190910101525050600101613a3e565b506001850382148015613b7157508683145b8015613b7c57508581145b613b99576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613bae57613bae61531d565b60200260200101519750505050505050505b9392505050565b6000818310613bdf57613bda8284613be5565b610b02565b610b0283835b6040805160016020820152908101839052606081018290526000906080016135d1565b828054828255906000526020600020908101928215613c5d579160200282015b82811115613c5d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c28565b50613c69929150613c6d565b5090565b5b80821115613c695760008155600101613c6e565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613cba57613cba613c82565b60405290565b60405160a081016001600160401b0381118282101715613cba57613cba613c82565b60405160c081016001600160401b0381118282101715613cba57613cba613c82565b604080519081016001600160401b0381118282101715613cba57613cba613c82565b604051601f8201601f191681016001600160401b0381118282101715613d4e57613d4e613c82565b604052919050565b60006001600160401b03821115613d6f57613d6f613c82565b5060051b60200190565b6001600160a01b038116811461054357600080fd5b80356001600160401b0381168114613da557600080fd5b919050565b801515811461054357600080fd5b8035613da581613daa565b60006001600160401b03821115613ddc57613ddc613c82565b50601f01601f191660200190565b600082601f830112613dfb57600080fd5b8135613e0e613e0982613dc3565b613d26565b818152846020838601011115613e2357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613e5357600080fd5b82356001600160401b0380821115613e6a57600080fd5b818501915085601f830112613e7e57600080fd5b8135613e8c613e0982613d56565b81815260059190911b83018401908481019088831115613eab57600080fd5b8585015b83811015613f5157803585811115613ec75760008081fd5b86016080818c03601f1901811315613edf5760008081fd5b613ee7613c98565b89830135613ef481613d79565b81526040613f03848201613d8e565b8b830152606080850135613f1681613daa565b83830152928401359289841115613f2f57600091508182fd5b613f3d8f8d86880101613dea565b908301525085525050918601918601613eaf565b5098975050505050505050565b60005b83811015613f79578181015183820152602001613f61565b50506000910152565b60008151808452613f9a816020860160208601613f5e565b601f01601f19169290920160200192915050565b602081526000610b026020830184613f82565b8060608101831015610b0557600080fd5b60008083601f840112613fe457600080fd5b5081356001600160401b03811115613ffb57600080fd5b60208301915083602082850101111561401357600080fd5b9250929050565b60008083601f84011261402c57600080fd5b5081356001600160401b0381111561404357600080fd5b6020830191508360208260051b850101111561401357600080fd5b60008060008060008060008060e0898b03121561407a57600080fd5b6140848a8a613fc1565b975060608901356001600160401b03808211156140a057600080fd5b6140ac8c838d01613fd2565b909950975060808b01359150808211156140c557600080fd5b6140d18c838d0161401a565b909750955060a08b01359150808211156140ea57600080fd5b506140f78b828c0161401a565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561412557600080fd5b61412f8585613fc1565b925060608401356001600160401b0381111561414a57600080fd5b61415686828701613fd2565b9497909650939450505050565b6000806040838503121561417657600080fd5b61417f83613d8e565b915061418d60208401613d8e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106141bc576141bc614196565b9052565b60208101610b0582846141ac565b600060a082840312156141e057600080fd5b6141e8613cc0565b9050813581526141fa60208301613d8e565b602082015261420b60408301613d8e565b604082015261421c60608301613d8e565b606082015261422d60808301613d8e565b608082015292915050565b8035613da581613d79565b803563ffffffff81168114613da557600080fd5b600082601f83011261426857600080fd5b81356020614278613e0983613d56565b82815260059290921b8401810191818101908684111561429757600080fd5b8286015b848110156143675780356001600160401b03808211156142bb5760008081fd5b9088019060a0828b03601f19018113156142d55760008081fd5b6142dd613cc0565b87840135838111156142ef5760008081fd5b6142fd8d8a83880101613dea565b82525060408085013561430f81613d79565b828a01526060614320868201614243565b8284015260809150818601358581111561433a5760008081fd5b6143488f8c838a0101613dea565b918401919091525091909301359083015250835291830191830161429b565b509695505050505050565b6000610140828403121561438557600080fd5b61438d613ce2565b905061439983836141ce565b815260a08201356001600160401b03808211156143b557600080fd5b6143c185838601613dea565b602084015260c08401359150808211156143da57600080fd5b6143e685838601613dea565b60408401526143f760e08501614238565b6060840152610100840135608084015261012084013591508082111561441c57600080fd5b5061442984828501614257565b60a08301525092915050565b600082601f83011261444657600080fd5b81356020614456613e0983613d56565b82815260059290921b8401810191818101908684111561447557600080fd5b8286015b848110156143675780356001600160401b038111156144985760008081fd5b6144a68986838b0101614372565b845250918301918301614479565b600082601f8301126144c557600080fd5b813560206144d5613e0983613d56565b82815260059290921b840181019181810190868411156144f457600080fd5b8286015b848110156143675780356001600160401b038082111561451757600080fd5b818901915089603f83011261452b57600080fd5b8582013561453b613e0982613d56565b81815260059190911b830160400190878101908c83111561455b57600080fd5b604085015b838110156145945780358581111561457757600080fd5b6145868f6040838a0101613dea565b845250918901918901614560565b508752505050928401925083016144f8565b600082601f8301126145b757600080fd5b813560206145c7613e0983613d56565b8083825260208201915060208460051b8701019350868411156145e957600080fd5b602086015b8481101561436757803583529183019183016145ee565b600082601f83011261461657600080fd5b81356020614626613e0983613d56565b82815260059290921b8401810191818101908684111561464557600080fd5b8286015b848110156143675780356001600160401b03808211156146695760008081fd5b9088019060a0828b03601f19018113156146835760008081fd5b61468b613cc0565b614696888501613d8e565b8152604080850135848111156146ac5760008081fd5b6146ba8e8b83890101614435565b8a84015250606080860135858111156146d35760008081fd5b6146e18f8c838a01016144b4565b83850152506080915081860135858111156146fc5760008081fd5b61470a8f8c838a01016145a6565b9184019190915250919093013590830152508352918301918301614649565b6000806040838503121561473c57600080fd5b6001600160401b038335111561475157600080fd5b61475e8484358501614605565b91506001600160401b036020840135111561477857600080fd5b6020830135830184601f82011261478e57600080fd5b61479b613e098235613d56565b81358082526020808301929160051b8401018710156147b957600080fd5b602083015b6020843560051b85010181101561495f576001600160401b03813511156147e457600080fd5b87603f8235860101126147f657600080fd5b614809613e096020833587010135613d56565b81358501602081810135808452908301929160059190911b016040018a101561483157600080fd5b604083358701015b83358701602081013560051b0160400181101561494f576001600160401b038135111561486557600080fd5b833587018135016040818d03603f1901121561488057600080fd5b614888613d04565b604082013581526001600160401b03606083013511156148a757600080fd5b8c605f6060840135840101126148bc57600080fd5b60406060830135830101356148d3613e0982613d56565b808282526020820191508f60608460051b60608801358801010111156148f857600080fd5b6060808601358601015b60608460051b60608801358801010181101561492f5761492181614243565b835260209283019201614902565b508060208501525050508085525050602083019250602081019050614839565b50845250602092830192016147be565b508093505050509250929050565b60008060008060006060868803121561498557600080fd5b85356001600160401b038082111561499c57600080fd5b6149a889838a01614372565b965060208801359150808211156149be57600080fd5b6149ca89838a0161401a565b909650945060408801359150808211156149e357600080fd5b506149f08882890161401a565b969995985093965092949392505050565b600060608284031215614a1357600080fd5b604051606081018181106001600160401b0382111715614a3557614a35613c82565b6040528235614a4381613d79565b8152614a5160208401614243565b60208201526040830135614a6481613d79565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136246080850182613f82565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614b0e57603f19888603018452614afc858351614a70565b94509285019290850190600101614ae0565b5092979650505050505050565b600060208284031215614b2d57600080fd5b81356001600160401b03811115614b4357600080fd5b820160a08185031215613bc057600080fd5b803560ff81168114613da557600080fd5b600060208284031215614b7857600080fd5b610b0282614b55565b60008151808452602080850194506020840160005b83811015614bbb5781516001600160a01b031687529582019590820190600101614b96565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c1560e0840182614b81565b90506040840151601f198483030160c0850152614c328282614b81565b95945050505050565b60008060408385031215614c4e57600080fd5b614c5783613d8e565b946020939093013593505050565b600060208284031215614c7757600080fd5b610b0282613d8e565b602081526000610b026020830184614a70565b600060208284031215614ca557600080fd5b8135613bc081613d79565b600082601f830112614cc157600080fd5b81356020614cd1613e0983613d56565b8083825260208201915060208460051b870101935086841115614cf357600080fd5b602086015b84811015614367578035614d0b81613d79565b8352918301918301614cf8565b60006020808385031215614d2b57600080fd5b82356001600160401b0380821115614d4257600080fd5b818501915085601f830112614d5657600080fd5b8135614d64613e0982613d56565b81815260059190911b83018401908481019088831115614d8357600080fd5b8585015b83811015613f5157803585811115614d9e57600080fd5b860160c0818c03601f19011215614db55760008081fd5b614dbd613ce2565b8882013581526040614dd0818401614b55565b8a8301526060614de1818501614b55565b8284015260809150614df4828501613db8565b9083015260a08381013589811115614e0c5760008081fd5b614e1a8f8d83880101614cb0565b838501525060c0840135915088821115614e345760008081fd5b614e428e8c84870101614cb0565b9083015250845250918601918601614d87565b80356001600160e01b0381168114613da557600080fd5b600082601f830112614e7d57600080fd5b81356020614e8d613e0983613d56565b82815260069290921b84018101918181019086841115614eac57600080fd5b8286015b848110156143675760408189031215614ec95760008081fd5b614ed1613d04565b614eda82613d8e565b8152614ee7858301614e55565b81860152835291830191604001614eb0565b600082601f830112614f0a57600080fd5b81356020614f1a613e0983613d56565b82815260059290921b84018101918181019086841115614f3957600080fd5b8286015b848110156143675780356001600160401b0380821115614f5d5760008081fd5b9088019060a0828b03601f1901811315614f775760008081fd5b614f7f613cc0565b614f8a888501613d8e565b815260408085013584811115614fa05760008081fd5b614fae8e8b83890101613dea565b8a8401525060609350614fc2848601613d8e565b908201526080614fd3858201613d8e565b93820193909352920135908201528352918301918301614f3d565b600082601f830112614fff57600080fd5b8135602061500f613e0983613d56565b82815260069290921b8401810191818101908684111561502e57600080fd5b8286015b84811015614367576040818903121561504b5760008081fd5b615053613d04565b813581528482013585820152835291830191604001615032565b6000602080838503121561508057600080fd5b82356001600160401b038082111561509757600080fd5b90840190608082870312156150ab57600080fd5b6150b3613c98565b8235828111156150c257600080fd5b830160408189038113156150d557600080fd5b6150dd613d04565b8235858111156150ec57600080fd5b8301601f81018b136150fd57600080fd5b803561510b613e0982613d56565b81815260069190911b8201890190898101908d83111561512a57600080fd5b928a01925b8284101561517a5785848f0312156151475760008081fd5b61514f613d04565b843561515a81613d79565b8152615167858d01614e55565b818d0152825292850192908a019061512f565b84525050508287013591508482111561519257600080fd5b61519e8a838501614e6c565b818801528352505082840135828111156151b757600080fd5b6151c388828601614ef9565b858301525060408301359350818411156151dc57600080fd5b6151e887858501614fee565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561529557601f19868403018952815160a06001600160401b0380835116865286830151828888015261525983880182613f82565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615221565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526152c56080840187615204565b83810360408581019190915286518083528388019284019060005b81811015615305578451805184528601518684015293850193918301916001016152e0565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561538a57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615353565b50508583015187820388850152805180835290840192506000918401905b808310156153e357835180516001600160401b031683528501516001600160e01b0316858301529284019260019290920191908501906153a8565b50979650505050505050565b602081526000610b026020830184615333565b60006020828403121561541457600080fd5b8151613bc081613daa565b600181811c9082168061543357607f821691505b6020821081036112ed57634e487b7160e01b600052602260045260246000fd5b60008083546154618161541f565b60018281168015615479576001811461548e576154bd565b60ff19841687528215158302870194506154bd565b8760005260208060002060005b858110156154b45781548a82015290840190820161549b565b50505082870194505b50929695505050505050565b600081546154d68161541f565b8085526020600183811680156154f3576001811461550d5761553b565b60ff1985168884015283151560051b88018301955061553b565b866000528260002060005b858110156155335781548a8201860152908301908401615518565b890184019650505b505050505092915050565b6040815260006155596040830185613f82565b8281036020840152614c3281856154c9565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156155a1576155a161556b565b5092915050565b6040815260006155bb6040830185615204565b8281036020840152614c328185615333565b6000602082840312156155df57600080fd5b81356001600160401b038111156155f557600080fd5b61362484828501614605565b81810381811115610b0557610b0561556b565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061564457615644615614565b92169190910692915050565b8082028115828204841417610b0557610b0561556b565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261569a60a0870182613f82565b9050606085015186820360608801526156b38282613f82565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156153e357835180516001600160a01b03168352860151868301529285019260019290920191908401906156d6565b602081526000610b026020830184615667565b60808152600061572e6080830187615667565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561576c57600080fd5b835161577781613daa565b60208501519093506001600160401b0381111561579357600080fd5b8401601f810186136157a457600080fd5b80516157b2613e0982613dc3565b8181528760208385010111156157c757600080fd5b6157d8826020830160208601613f5e565b809450505050604084015190509250925092565b601f821115610d95576000816000526020600020601f850160051c810160208610156158155750805b601f850160051c820191505b8181101561583457828155600101615821565b505050505050565b81516001600160401b0381111561585557615855613c82565b61586981615863845461541f565b846157ec565b602080601f83116001811461589e57600084156158865750858301515b600019600386901b1c1916600185901b178555615834565b600085815260208120601f198616915b828110156158cd578886015182559484019460019091019084016158ae565b50858210156158eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0260a08301600185016154c9565b80820180821115610b0557610b0561556b565b60ff8181168382160190811115610b0557610b0561556b565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b03808416806159b3576159b3615614565b92169190910492915050565b6000602082840312156159d157600080fd5b610b0282614243565b6000808335601e198436030181126159f157600080fd5b8301803591506001600160401b03821115615a0b57600080fd5b60200191503681900382131561401357600080fd5b6020810160068310615a3457615a34614196565b91905290565b60ff81811683821602908116908181146155a1576155a161556b565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615aae5784546001600160a01b031683526001948501949284019201615a89565b50508481036060860152865180825290820192508187019060005b81811015615aee5782516001600160a01b031685529383019391830191600101615ac9565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614c326060830184613f82565b8281526040602082015260006136246040830184613f82565b6001600160401b038481168252831660208201526060810161362460408301846141ac565b848152615b8260208201856141ac565b608060408201526000615b986080830185613f82565b905082606083015295945050505050565b600060208284031215615bbb57600080fd5b8151613bc081613d79565b6020815260008251610100806020850152615be5610120850183613f82565b91506020850151615c0160408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615c3b60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615c588483613f82565b935060c08701519150808685030160e0870152615c758483613f82565b935060e0870151915080868503018387015250615afe8382613f82565b600060208284031215615ca457600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561529557601f19868403018952815160a08151818652615cee82870182613f82565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615d2a8382613f82565b6080948501519790940196909652505098840198925090830190600101615cc8565b602081526000610b026020830184615cab565b60008282518085526020808601955060208260051b8401016020860160005b8481101561529557601f19868403018952615d9a838351613f82565b98840198925090830190600101615d7e565b60008151808452602080850194506020840160005b83811015614bbb57815163ffffffff1687529582019590820190600101615dc1565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615e4b6101a0850183613f82565b91506040870151605f198086850301610120870152615e6a8483613f82565b935060608901519150615e87838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615eb08282615cab565b9150508281036020840152615ec58186615d5f565b90508281036040840152615afe8185615dac56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfig\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006c5138038062006c51833981016040819052620000359162000886565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d1576000828281518110620003915762000391620009c3565b60209081029190910181015190810151909150620003ba60066001600160401b038316620005d5565b50806001600160401b0316600003620003e65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200040f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200043d90620009d9565b9050600003620004a0578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004df565b8154600160a81b90046001600160401b0316600114620004df57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005155750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000544828262000a6a565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005b990859062000b36565b60405180910390a25050505080600101905062000370565b5050565b6000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b80516001600160401b0381168114620006ca57600080fd5b919050565b6001600160a01b0381168114620006e557600080fd5b50565b6000601f83601f840112620006fc57600080fd5b825160206001600160401b03808311156200071b576200071b6200063e565b8260051b6200072c8382016200067f565b93845286810183019383810190898611156200074757600080fd5b84890192505b858310156200087957825184811115620007675760008081fd5b89016080601f19828d038101821315620007815760008081fd5b6200078b62000654565b888401516200079a81620006cf565b81526040620007ab858201620006b2565b8a8301526060808601518015158114620007c55760008081fd5b83830152938501519389851115620007dd5760008081fd5b84860195508f603f870112620007f557600094508485fd5b8a8601519450898511156200080e576200080e6200063e565b6200081f8b858f880116016200067f565b93508484528f82868801011115620008375760008081fd5b60005b8581101562000857578681018301518582018d01528b016200083a565b5060009484018b0194909452509182015283525091840191908401906200074d565b9998505050505050505050565b60008060008385036101008112156200089e57600080fd5b6080811215620008ad57600080fd5b620008b762000654565b620008c286620006b2565b81526020860151620008d481620006cf565b60208201526040860151620008e981620006cf565b60408201526060860151620008fe81620006cf565b606082810191909152909450607f19820112156200091b57600080fd5b50604051606081016001600160401b0380821183831017156200094257620009426200063e565b81604052608087015191506200095882620006cf565b90825260a08601519063ffffffff821682146200097457600080fd5b81602084015260c087015191506200098c82620006cf565b6040830182905260e087015192945080831115620009a957600080fd5b5050620009b986828701620006e8565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ee57607f821691505b60208210810362000a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a65576000816000526020600020601f850160051c8101602086101562000a405750805b601f850160051c820191505b8181101562000a615782815560010162000a4c565b5050505b505050565b81516001600160401b0381111562000a865762000a866200063e565b62000a9e8162000a978454620009d9565b8462000a15565b602080601f83116001811462000ad6576000841562000abd5750858301515b600019600386901b1c1916600185901b17855562000a61565b600085815260208120601f198616915b8281101562000b075788860151825594840194600190910190840162000ae6565b508582101562000b265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8b81620009d9565b8060a089015260c0600183166000811462000baf576001811462000bcc5762000bfe565b60ff19841660c08b015260c083151560051b8b0101945062000bfe565b85600052602060002060005b8481101562000bf55781548c820185015290880190890162000bd8565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fce62000c83600039600081816102470152612ca10152600081816102180152612f660152600081816101e9015281816105890152818161073b01526126620152600081816101ba01526128a1015260008181611d710152611da40152615fce6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637437ff9f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806383503786116100b2578063835037861461044a57806385572ffb146104605780638da5cb5b1461046e57600080fd5b80637437ff9f146103b057806379ba50971461044257600080fd5b80633f4b04aa116101245780635e7bb008116101095780635e7bb0081461037757806360987c201461038a5780636f9e320f1461039d57600080fd5b80633f4b04aa1461033c5780635e36480c1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613ee5565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614053565b610184610324366004614103565b610547565b6101846103373660046141b5565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61036a610365366004614208565b610ab7565b6040516102c49190614265565b6101846103853660046147ce565b610b0c565b610184610398366004614a12565b610d9b565b6101846103ab366004614aa6565b61107b565b61040c604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b61018461108c565b61045261113d565b6040516102c4929190614b5c565b61018461016c366004614bfd565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c48565b611398565b6040516102c49190614ca8565b6104df6104b7366004614d1d565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d47565b6114f6565b6040516102c49190614d62565b61018461051b366004614d75565b611602565b61018461052e366004614dfa565b611613565b61053b611655565b610544816116b1565b50565b60006105558789018961514f565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c1933093909190600401615384565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154d1565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc6153ff565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154e4565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df82611922565b9050806001016040516107f2919061553b565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb92919061562e565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b6060840151610940906001615669565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c7929091615690565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061196e915050565b505050505050505050565b610a8e610a5d828401846156b5565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c67565b604080516000808252602082019092529050610ab160018585858586600061196e565b50505050565b6000610ac5600160046156e9565b6002610ad2608085615712565b6001600160401b0316610ae59190615738565b610aef8585611d29565b901c166003811115610b0357610b0361423b565b90505b92915050565b610b14611d6e565b815181518114610b37576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d8b576000848281518110610b5657610b566153ff565b60200260200101519050600081602001515190506000858481518110610b7e57610b7e6153ff565b6020026020010151905080518214610ba9576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d7c576000828281518110610bc857610bc86153ff565b6020026020010151600001519050600085602001518381518110610bee57610bee6153ff565b6020026020010151905081600014610c42578060800151821015610c42578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610c5457610c546153ff565b602002602001015160200151518160a001515114610ca157805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610d6e576000858581518110610cc557610cc56153ff565b6020026020010151602001518281518110610ce257610ce26153ff565b602002602001015163ffffffff16905080600014610d655760008360a001518381518110610d1257610d126153ff565b60200260200101516040015163ffffffff16905080821015610d63578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610ca4565b505050806001019050610bac565b50505050806001019050610b3a565b50610d968383611c67565b505050565b333014610dbb576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610df8565b6040805180820190915260008082526020820152815260200190600190039081610dd15790505b5060a08701515190915015610e2e57610e2b8660a001518760200151886060015189600001516020015189898989611dd6565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e69929101614053565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f44576040516308d450a160e01b81526001600160a01b038216906308d450a190610eca9085906004016157f0565b600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f44573d808015610f23576040519150601f19603f3d011682016040523d82523d6000602084013e610f28565b606091505b50806040516309c2532560e01b81526004016107cb9190614053565b604088015151158015610f5957506080880151155b80610f70575060608801516001600160a01b03163b155b80610f9757506060880151610f95906001600160a01b03166385572ffb60e01b611f87565b155b15610fa457505050611074565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf97983926110029289926113889291600401615803565b6000604051808303816000875af1158015611021573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611049919081019061583f565b50915091508161106e57806040516302a35ba360e21b81526004016107cb9190614053565b50505050505b5050505050565b611083611655565b61054481611fa3565b6001546001600160a01b031633146110e65760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606080600061114c6006612082565b6001600160401b0381111561116357611163613d27565b6040519080825280602002602001820160405280156111b457816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816111815790505b50905060006111c36006612082565b6001600160401b038111156111da576111da613d27565b604051908082528060200260200182016040528015611203578160200160208202803683370190505b50905060005b6112136006612082565b81101561138f5761122560068261208c565b828281518110611237576112376153ff565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061126d5761126d6153ff565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b909204909316918101919091526001820180549192916060840191906112e890615501565b80601f016020809104026020016040519081016040528092919081815260200182805461131490615501565b80156113615780601f1061133657610100808354040283529160200191611361565b820191906000526020600020905b81548152906001019060200180831161134457829003601f168201915b50505050508152505083828151811061137c5761137c6153ff565b6020908102919091010152600101611209565b50939092509050565b6113db6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561148457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611466575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114e657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c8575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161158290615501565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae90615501565b80156114e65780601f106115d0576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116115de57505050919092525091949350505050565b61160a611655565b61054481612098565b61161b611655565b60005b81518110156116515761164982828151811061163c5761163c6153ff565b6020026020010151612141565b60010161161e565b5050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b81518110156116515760008282815181106116d1576116d16153ff565b60200260200101519050600081602001519050611701816001600160401b0316600661246b90919063ffffffff16565b50806001600160401b031660000361172c5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611754576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461178090615501565b90506000036117e257815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161181f565b8154600160a81b90046001600160401b031660011461181f57604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118545750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611872576040516342bcdf7f60e11b815260040160405180910390fd5b600182016118808282615924565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9061190b9085906159e3565b60405180910390a2505050508060010190506116b4565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610b065760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119cd8760a4615a31565b9050826060015115611a155784516119e6906020615738565b86516119f3906020615738565b6119fe9060a0615a31565b611a089190615a31565b611a129082615a31565b90505b368114611a3e57604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a6d5781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a75611d6e565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ac357611ac361423b565b6002811115611ad457611ad461423b565b9052509050600281602001516002811115611af157611af161423b565b148015611b455750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b2d57611b2d6153ff565b6000918252602090912001546001600160a01b031633145b611b6257604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611c12576020820151611b7d906001615a44565b60ff16855114611ba0576040516371253a2560e01b815260040160405180910390fd5b8351855114611bc25760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bd4929190615a5d565b604051908190038120611beb918b90602001615a6d565b604051602081830303815290604052805190602001209050611c108a82888888612477565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c885760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611ccb565b604080518082019091526000815260606020820152815260200190600190039081611ca35790505b50905060005b845181101561107457611d21858281518110611cef57611cef6153ff565b602002602001015184611d1b57858381518110611d0e57611d0e6153ff565b6020026020010151612634565b83612634565b600101611cd1565b6001600160401b038216600090815260096020526040812081611d4d608085615a81565b6001600160401b031681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146116af57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611df157611df1613d27565b604051908082528060200260200182016040528015611e3657816020015b6040805180820190915260008082526020820152815260200190600190039081611e0f5790505b509050811560005b8a51811015611f795781611ed657848482818110611e5e57611e5e6153ff565b9050602002016020810190611e739190615aa7565b63ffffffff1615611ed657848482818110611e9057611e906153ff565b9050602002016020810190611ea59190615aa7565b8b8281518110611eb757611eb76153ff565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f548b8281518110611eeb57611eeb6153ff565b60200260200101518b8b8b8b8b87818110611f0857611f086153ff565b9050602002810190611f1a9190615ac2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f2b92505050565b838281518110611f6657611f666153ff565b6020908102919091010152600101611e3e565b505098975050505050505050565b6000611f928361320b565b8015610b035750610b038383613256565b80516001600160a01b0316611fcb576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b6000610b06825490565b6000610b0383836132f8565b336001600160a01b038216036120f05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361216c576000604051631b3fab5160e11b81526004016107cb9190615b08565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121bd576060840151600182018054911515620100000262ff0000199092169190911790556121f9565b6060840151600182015460ff62010000909104161515901515146121f9576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a084015180516101001015612225576001604051631b3fab5160e11b81526004016107cb9190615b08565b805160000361224a576005604051631b3fab5160e11b81526004016107cb9190615b08565b6122b084846003018054806020026020016040519081016040528092919081815260200182805480156122a657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612288575b5050505050613322565b8460600151156123e05761231e84846002018054806020026020016040519081016040528092919081815260200182805480156122a6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612288575050505050613322565b60808501518051610100101561234a576002604051631b3fab5160e11b81526004016107cb9190615b08565b604086015161235a906003615b22565b60ff16815111612380576003604051631b3fab5160e11b81526004016107cb9190615b08565b8151815110156123a6576001604051631b3fab5160e11b81526004016107cb9190615b08565b805160018401805461ff00191661010060ff8416021790556123d19060028601906020840190613cad565b506123de8582600161338b565b505b6123ec8482600261338b565b80516124019060038501906020840190613cad565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361245a9389939260028a01929190615b3e565b60405180910390a1611074846134e6565b6000610b03838361353d565b8251600090815b8181101561262a57600060018886846020811061249d5761249d6153ff565b6124aa91901a601b615a44565b8985815181106124bc576124bc6153ff565b60200260200101518986815181106124d6576124d66153ff565b602002602001015160405160008152602001604052604051612514949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612536573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156125975761259761423b565b60028111156125a8576125a861423b565b90525090506001816020015160028111156125c5576125c561423b565b146125e357604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561260d57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b85179450505080600101905061247e565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d591906154e4565b1561274657801561270457604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061275183611922565b600101805461275f90615501565b80601f016020809104026020016040519081016040528092919081815260200182805461278b90615501565b80156127d85780601f106127ad576101008083540402835291602001916127d8565b820191906000526020600020905b8154815290600101906020018083116127bb57829003601f168201915b505050602088015151929350505060008190036128075760405162bf199760e01b815260040160405180910390fd5b856040015151811461282c576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561284657612846613d27565b60405190808252806020026020018201604052801561286f578160200160208202803683370190505b50905060005b82811015612a1357600088602001518281518110612895576128956153ff565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461290c5780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461296057805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129ed817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129d294939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6040516020818303038152906040528051906020012061358c565b8383815181106129ff576129ff6153ff565b602090810291909101015250600101612875565b506000612a2a86838a606001518b60800151613694565b905080600003612a5857604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a8057612a806153ff565b602002602001015190506000612a9e8a836000015160600151610ab7565b90506000816003811115612ab457612ab461423b565b1480612ad157506003816003811115612acf57612acf61423b565b145b612b2757815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f23565b60608915612c06578b8581518110612b4157612b416153ff565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b6f88426156e9565b1190508080612b8f57506003836003811115612b8d57612b8d61423b565b145b612bb7576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bc957612bc96153ff565b602002602001015160000151600014612c00578c8681518110612bee57612bee6153ff565b60209081029190910101515160808501525b50612c72565b6000826003811115612c1a57612c1a61423b565b14612c7257825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f23565b8251608001516001600160401b031615612d4b576000826003811115612c9a57612c9a61423b565b03612d4b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cfb93929190615bf0565b6020604051808303816000875af1158015612d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3e91906154e4565b612d4b5750505050612f23565b60008d604001518681518110612d6357612d636153ff565b6020026020010151905080518460a001515114612dad57835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612dc18c85600001516060015160016136d1565b600080612dcf868486613776565b91509150612de68e876000015160600151846136d1565b8c15612e3d576003826003811115612e0057612e0061423b565b03612e3d576000856003811115612e1957612e1961423b565b14612e3d57855151604051632b11b8d960e01b81526107cb91908390600401615c1c565b6002826003811115612e5157612e5161423b565b14612e96576003826003811115612e6a57612e6a61423b565b14612e96578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c35565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612eee57612eee6153ff565b602002602001015186865a612f03908f6156e9565b604051612f139493929190615c5a565b60405180910390a4505050505050505b600101612a5b565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd39190615c91565b90506001600160a01b038116158061300257506130006001600160a01b03821663aff2afbf60e01b611f87565b155b1561302b5760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061304388858c6040015163ffffffff1661382a565b9150915060008060006130f66040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130c09190615cae565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b1790528786611388608461390d565b9250925092508261311c578160405163e1cd550960e01b81526004016107cb9190614053565b815160201461314b578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b6000828060200190518101906131619190615d7a565b9050866001600160a01b03168c6001600160a01b0316146131dd5760006131928d8a61318d868a6156e9565b61382a565b509050868110806131ac5750816131a988836156e9565b14155b156131db5760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061321e826301ffc9a760e01b613256565b8015610b06575061324f827fffffffff00000000000000000000000000000000000000000000000000000000613256565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132e1575060208210155b80156132ed5750600081115b979650505050505050565b600082600001828154811061330f5761330f6153ff565b9060005260206000200154905092915050565b60005b8151811015610d965760ff831660009081526003602052604081208351909190849084908110613357576133576153ff565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613325565b60005b8251811015610ab15760008382815181106133ab576133ab6153ff565b60200260200101519050600060028111156133c8576133c861423b565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156134075761340761423b565b14613428576004604051631b3fab5160e11b81526004016107cb9190615b08565b6001600160a01b03811661344f5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134755761347561423b565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134d2576134d261423b565b02179055509050505080600101905061338e565b60ff81166105445760ff8082166000908152600260205260409020600101546201000090041661352957604051631e8ed32560e21b815260040160405180910390fd5b600b805467ffffffffffffffff1916905550565b600081815260018301602052604081205461358457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b06565b506000610b06565b8151805160608085015190830151608080870151940151604051600095869588956135f095919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136339190615e34565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136a28585856139e7565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136e0608085615712565b6001600160401b03166136f39190615738565b905060006137018585611d29565b905081613710600160046156e9565b901b1916818360038111156137275761372761423b565b6001600160401b03871660009081526009602052604081209190921b92909217918291613755608088615a81565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906137a390889088908890600401615ecb565b600060405180830381600087803b1580156137bd57600080fd5b505af19250505080156137ce575060015b61380d573d8080156137fc576040519150601f19603f3d011682016040523d82523d6000602084013e613801565b606091505b50600392509050613822565b50506040805160208101909152600081526002905b935093915050565b600080600080600061388b8860405160240161385591906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790528888611388608461390d565b925092509250826138b1578160405163e1cd550960e01b81526004016107cb9190614053565b60208251146138e0578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906138f49190615d7a565b6138fe82886156e9565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561392f5761392f613d27565b6040519080825280601f01601f191660200182016040528015613959576020820181803683370190505b509150863b6139735763030ed58f60e21b60005260046000fd5b5a8581101561398d57632be8ca8b60e21b60005260046000fd5b85900360408104810387106139ad576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139d05750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a0f57604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a2357506101018111155b613a40576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a6a576040516309bde33960e01b815260040160405180910390fd5b80600003613a975786600081518110613a8557613a856153ff565b60200260200101519350505050613c65565b6000816001600160401b03811115613ab157613ab1613d27565b604051908082528060200260200182016040528015613ada578160200160208202803683370190505b50905060008080805b85811015613c045760006001821b8b811603613b3e5788851015613b27578c5160018601958e918110613b1857613b186153ff565b60200260200101519050613b60565b8551600185019487918110613b1857613b186153ff565b8b5160018401938d918110613b5557613b556153ff565b602002602001015190505b600089861015613b90578d5160018701968f918110613b8157613b816153ff565b60200260200101519050613bb2565b8651600186019588918110613ba757613ba76153ff565b602002602001015190505b82851115613bd3576040516309bde33960e01b815260040160405180910390fd5b613bdd8282613c6c565b878481518110613bef57613bef6153ff565b60209081029190910101525050600101613ae3565b506001850382148015613c1657508683145b8015613c2157508581145b613c3e576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c5357613c536153ff565b60200260200101519750505050505050505b9392505050565b6000818310613c8457613c7f8284613c8a565b610b03565b610b0383835b604080516001602082015290810183905260608101829052600090608001613676565b828054828255906000526020600020908101928215613d02579160200282015b82811115613d0257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613ccd565b50613d0e929150613d12565b5090565b5b80821115613d0e5760008155600101613d13565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d5f57613d5f613d27565b60405290565b60405160a081016001600160401b0381118282101715613d5f57613d5f613d27565b60405160c081016001600160401b0381118282101715613d5f57613d5f613d27565b604080519081016001600160401b0381118282101715613d5f57613d5f613d27565b604051601f8201601f191681016001600160401b0381118282101715613df357613df3613d27565b604052919050565b60006001600160401b03821115613e1457613e14613d27565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e4a57600080fd5b919050565b801515811461054457600080fd5b8035613e4a81613e4f565b60006001600160401b03821115613e8157613e81613d27565b50601f01601f191660200190565b600082601f830112613ea057600080fd5b8135613eb3613eae82613e68565b613dcb565b818152846020838601011115613ec857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ef857600080fd5b82356001600160401b0380821115613f0f57600080fd5b818501915085601f830112613f2357600080fd5b8135613f31613eae82613dfb565b81815260059190911b83018401908481019088831115613f5057600080fd5b8585015b83811015613ff657803585811115613f6c5760008081fd5b86016080818c03601f1901811315613f845760008081fd5b613f8c613d3d565b89830135613f9981613e1e565b81526040613fa8848201613e33565b8b830152606080850135613fbb81613e4f565b83830152928401359289841115613fd457600091508182fd5b613fe28f8d86880101613e8f565b908301525085525050918601918601613f54565b5098975050505050505050565b60005b8381101561401e578181015183820152602001614006565b50506000910152565b6000815180845261403f816020860160208601614003565b601f01601f19169290920160200192915050565b602081526000610b036020830184614027565b8060608101831015610b0657600080fd5b60008083601f84011261408957600080fd5b5081356001600160401b038111156140a057600080fd5b6020830191508360208285010111156140b857600080fd5b9250929050565b60008083601f8401126140d157600080fd5b5081356001600160401b038111156140e857600080fd5b6020830191508360208260051b85010111156140b857600080fd5b60008060008060008060008060e0898b03121561411f57600080fd5b6141298a8a614066565b975060608901356001600160401b038082111561414557600080fd5b6141518c838d01614077565b909950975060808b013591508082111561416a57600080fd5b6141768c838d016140bf565b909750955060a08b013591508082111561418f57600080fd5b5061419c8b828c016140bf565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141ca57600080fd5b6141d48585614066565b925060608401356001600160401b038111156141ef57600080fd5b6141fb86828701614077565b9497909650939450505050565b6000806040838503121561421b57600080fd5b61422483613e33565b915061423260208401613e33565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106142615761426161423b565b9052565b60208101610b068284614251565b600060a0828403121561428557600080fd5b61428d613d65565b90508135815261429f60208301613e33565b60208201526142b060408301613e33565b60408201526142c160608301613e33565b60608201526142d260808301613e33565b608082015292915050565b8035613e4a81613e1e565b803563ffffffff81168114613e4a57600080fd5b600082601f83011261430d57600080fd5b8135602061431d613eae83613dfb565b82815260059290921b8401810191818101908684111561433c57600080fd5b8286015b8481101561440c5780356001600160401b03808211156143605760008081fd5b9088019060a0828b03601f190181131561437a5760008081fd5b614382613d65565b87840135838111156143945760008081fd5b6143a28d8a83880101613e8f565b8252506040808501356143b481613e1e565b828a015260606143c58682016142e8565b828401526080915081860135858111156143df5760008081fd5b6143ed8f8c838a0101613e8f565b9184019190915250919093013590830152508352918301918301614340565b509695505050505050565b6000610140828403121561442a57600080fd5b614432613d87565b905061443e8383614273565b815260a08201356001600160401b038082111561445a57600080fd5b61446685838601613e8f565b602084015260c084013591508082111561447f57600080fd5b61448b85838601613e8f565b604084015261449c60e085016142dd565b606084015261010084013560808401526101208401359150808211156144c157600080fd5b506144ce848285016142fc565b60a08301525092915050565b600082601f8301126144eb57600080fd5b813560206144fb613eae83613dfb565b82815260059290921b8401810191818101908684111561451a57600080fd5b8286015b8481101561440c5780356001600160401b0381111561453d5760008081fd5b61454b8986838b0101614417565b84525091830191830161451e565b600082601f83011261456a57600080fd5b8135602061457a613eae83613dfb565b82815260059290921b8401810191818101908684111561459957600080fd5b8286015b8481101561440c5780356001600160401b03808211156145bc57600080fd5b818901915089603f8301126145d057600080fd5b858201356145e0613eae82613dfb565b81815260059190911b830160400190878101908c83111561460057600080fd5b604085015b838110156146395780358581111561461c57600080fd5b61462b8f6040838a0101613e8f565b845250918901918901614605565b5087525050509284019250830161459d565b600082601f83011261465c57600080fd5b8135602061466c613eae83613dfb565b8083825260208201915060208460051b87010193508684111561468e57600080fd5b602086015b8481101561440c5780358352918301918301614693565b600082601f8301126146bb57600080fd5b813560206146cb613eae83613dfb565b82815260059290921b840181019181810190868411156146ea57600080fd5b8286015b8481101561440c5780356001600160401b038082111561470e5760008081fd5b9088019060a0828b03601f19018113156147285760008081fd5b614730613d65565b61473b888501613e33565b8152604080850135848111156147515760008081fd5b61475f8e8b838901016144da565b8a84015250606080860135858111156147785760008081fd5b6147868f8c838a0101614559565b83850152506080915081860135858111156147a15760008081fd5b6147af8f8c838a010161464b565b91840191909152509190930135908301525083529183019183016146ee565b600080604083850312156147e157600080fd5b6001600160401b03833511156147f657600080fd5b61480384843585016146aa565b91506001600160401b036020840135111561481d57600080fd5b6020830135830184601f82011261483357600080fd5b614840613eae8235613dfb565b81358082526020808301929160051b84010187101561485e57600080fd5b602083015b6020843560051b850101811015614a04576001600160401b038135111561488957600080fd5b87603f82358601011261489b57600080fd5b6148ae613eae6020833587010135613dfb565b81358501602081810135808452908301929160059190911b016040018a10156148d657600080fd5b604083358701015b83358701602081013560051b016040018110156149f4576001600160401b038135111561490a57600080fd5b833587018135016040818d03603f1901121561492557600080fd5b61492d613da9565b604082013581526001600160401b036060830135111561494c57600080fd5b8c605f60608401358401011261496157600080fd5b6040606083013583010135614978613eae82613dfb565b808282526020820191508f60608460051b606088013588010101111561499d57600080fd5b6060808601358601015b60608460051b6060880135880101018110156149d4576149c6816142e8565b8352602092830192016149a7565b5080602085015250505080855250506020830192506020810190506148de565b5084525060209283019201614863565b508093505050509250929050565b600080600080600060608688031215614a2a57600080fd5b85356001600160401b0380821115614a4157600080fd5b614a4d89838a01614417565b96506020880135915080821115614a6357600080fd5b614a6f89838a016140bf565b90965094506040880135915080821115614a8857600080fd5b50614a95888289016140bf565b969995985093965092949392505050565b600060608284031215614ab857600080fd5b604051606081018181106001600160401b0382111715614ada57614ada613d27565b6040528235614ae881613e1e565b8152614af6602084016142e8565b60208201526040830135614b0981613e1e565b60408201529392505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136c96080850182614027565b604080825283519082018190526000906020906060840190828701845b82811015614b9e5781516001600160401b031684529284019290840190600101614b79565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015614bee57601f19868403018552614bdc838351614b15565b94870194925090860190600101614bc0565b50909998505050505050505050565b600060208284031215614c0f57600080fd5b81356001600160401b03811115614c2557600080fd5b820160a08185031215613c6557600080fd5b803560ff81168114613e4a57600080fd5b600060208284031215614c5a57600080fd5b610b0382614c37565b60008151808452602080850194506020840160005b83811015614c9d5781516001600160a01b031687529582019590820190600101614c78565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cf760e0840182614c63565b90506040840151601f198483030160c0850152614d148282614c63565b95945050505050565b60008060408385031215614d3057600080fd5b614d3983613e33565b946020939093013593505050565b600060208284031215614d5957600080fd5b610b0382613e33565b602081526000610b036020830184614b15565b600060208284031215614d8757600080fd5b8135613c6581613e1e565b600082601f830112614da357600080fd5b81356020614db3613eae83613dfb565b8083825260208201915060208460051b870101935086841115614dd557600080fd5b602086015b8481101561440c578035614ded81613e1e565b8352918301918301614dda565b60006020808385031215614e0d57600080fd5b82356001600160401b0380821115614e2457600080fd5b818501915085601f830112614e3857600080fd5b8135614e46613eae82613dfb565b81815260059190911b83018401908481019088831115614e6557600080fd5b8585015b83811015613ff657803585811115614e8057600080fd5b860160c0818c03601f19011215614e975760008081fd5b614e9f613d87565b8882013581526040614eb2818401614c37565b8a8301526060614ec3818501614c37565b8284015260809150614ed6828501613e5d565b9083015260a08381013589811115614eee5760008081fd5b614efc8f8d83880101614d92565b838501525060c0840135915088821115614f165760008081fd5b614f248e8c84870101614d92565b9083015250845250918601918601614e69565b80356001600160e01b0381168114613e4a57600080fd5b600082601f830112614f5f57600080fd5b81356020614f6f613eae83613dfb565b82815260069290921b84018101918181019086841115614f8e57600080fd5b8286015b8481101561440c5760408189031215614fab5760008081fd5b614fb3613da9565b614fbc82613e33565b8152614fc9858301614f37565b81860152835291830191604001614f92565b600082601f830112614fec57600080fd5b81356020614ffc613eae83613dfb565b82815260059290921b8401810191818101908684111561501b57600080fd5b8286015b8481101561440c5780356001600160401b038082111561503f5760008081fd5b9088019060a0828b03601f19018113156150595760008081fd5b615061613d65565b61506c888501613e33565b8152604080850135848111156150825760008081fd5b6150908e8b83890101613e8f565b8a84015250606093506150a4848601613e33565b9082015260806150b5858201613e33565b9382019390935292013590820152835291830191830161501f565b600082601f8301126150e157600080fd5b813560206150f1613eae83613dfb565b82815260069290921b8401810191818101908684111561511057600080fd5b8286015b8481101561440c576040818903121561512d5760008081fd5b615135613da9565b813581528482013585820152835291830191604001615114565b6000602080838503121561516257600080fd5b82356001600160401b038082111561517957600080fd5b908401906080828703121561518d57600080fd5b615195613d3d565b8235828111156151a457600080fd5b830160408189038113156151b757600080fd5b6151bf613da9565b8235858111156151ce57600080fd5b8301601f81018b136151df57600080fd5b80356151ed613eae82613dfb565b81815260069190911b8201890190898101908d83111561520c57600080fd5b928a01925b8284101561525c5785848f0312156152295760008081fd5b615231613da9565b843561523c81613e1e565b8152615249858d01614f37565b818d0152825292850192908a0190615211565b84525050508287013591508482111561527457600080fd5b6152808a838501614f4e565b8188015283525050828401358281111561529957600080fd5b6152a588828601614fdb565b858301525060408301359350818411156152be57600080fd5b6152ca878585016150d0565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561537757601f19868403018952815160a06001600160401b0380835116865286830151828888015261533b83880182614027565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615303565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526153a760808401876152e6565b83810360408581019190915286518083528388019284019060005b818110156153e7578451805184528601518684015293850193918301916001016153c2565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561546c57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615435565b50508583015187820388850152805180835290840192506000918401905b808310156154c557835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061548a565b50979650505050505050565b602081526000610b036020830184615415565b6000602082840312156154f657600080fd5b8151613c6581613e4f565b600181811c9082168061551557607f821691505b60208210810361553557634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461554981615501565b600182811680156155615760018114615576576155a5565b60ff19841687528215158302870194506155a5565b8760005260208060002060005b8581101561559c5781548a820152908401908201615583565b50505082870194505b50929695505050505050565b600081546155be81615501565b8085526020600183811680156155db57600181146155f557615623565b60ff1985168884015283151560051b880183019550615623565b866000528260002060005b8581101561561b5781548a8201860152908301908401615600565b890184019650505b505050505092915050565b6040815260006156416040830185614027565b8281036020840152614d1481856155b1565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561568957615689615653565b5092915050565b6040815260006156a360408301856152e6565b8281036020840152614d148185615415565b6000602082840312156156c757600080fd5b81356001600160401b038111156156dd57600080fd5b6136c9848285016146aa565b81810381811115610b0657610b06615653565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061572c5761572c6156fc565b92169190910692915050565b8082028115828204841417610b0657610b06615653565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261578260a0870182614027565b90506060850151868203606088015261579b8282614027565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154c557835180516001600160a01b03168352860151868301529285019260019290920191908401906157be565b602081526000610b03602083018461574f565b608081526000615816608083018761574f565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561585457600080fd5b835161585f81613e4f565b60208501519093506001600160401b0381111561587b57600080fd5b8401601f8101861361588c57600080fd5b805161589a613eae82613e68565b8181528760208385010111156158af57600080fd5b6158c0826020830160208601614003565b809450505050604084015190509250925092565b601f821115610d96576000816000526020600020601f850160051c810160208610156158fd5750805b601f850160051c820191505b8181101561591c57828155600101615909565b505050505050565b81516001600160401b0381111561593d5761593d613d27565b6159518161594b8454615501565b846158d4565b602080601f831160018114615986576000841561596e5750858301515b600019600386901b1c1916600185901b17855561591c565b600085815260208120601f198616915b828110156159b557888601518255948401946001909101908401615996565b50858210156159d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610b0360a08301600185016155b1565b80820180821115610b0657610b06615653565b60ff8181168382160190811115610b0657610b06615653565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a9b57615a9b6156fc565b92169190910492915050565b600060208284031215615ab957600080fd5b610b03826142e8565b6000808335601e19843603018112615ad957600080fd5b8301803591506001600160401b03821115615af357600080fd5b6020019150368190038213156140b857600080fd5b6020810160068310615b1c57615b1c61423b565b91905290565b60ff818116838216029081169081811461568957615689615653565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b965784546001600160a01b031683526001948501949284019201615b71565b50508481036060860152865180825290820192508187019060005b81811015615bd65782516001600160a01b031685529383019391830191600101615bb1565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d146060830184614027565b8281526040602082015260006136c96040830184614027565b6001600160401b03848116825283166020820152606081016136c96040830184614251565b848152615c6a6020820185614251565b608060408201526000615c806080830185614027565b905082606083015295945050505050565b600060208284031215615ca357600080fd5b8151613c6581613e1e565b6020815260008251610100806020850152615ccd610120850183614027565b91506020850151615ce960408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d2360a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d408483614027565b935060c08701519150808685030160e0870152615d5d8483614027565b935060e0870151915080868503018387015250615be68382614027565b600060208284031215615d8c57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561537757601f19868403018952815160a08151818652615dd682870182614027565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e128382614027565b6080948501519790940196909652505098840198925090830190600101615db0565b602081526000610b036020830184615d93565b60008282518085526020808601955060208260051b8401016020860160005b8481101561537757601f19868403018952615e82838351614027565b98840198925090830190600101615e66565b60008151808452602080850194506020840160005b83811015614c9d57815163ffffffff1687529582019590820190600101615ea9565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f336101a0850183614027565b91506040870151605f198086850301610120870152615f528483614027565b935060608901519150615f6f838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f988282615d93565b9150508281036020840152615fad8186615e47565b90508281036040840152615be68185615e9456fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI @@ -314,25 +314,26 @@ func (_OffRamp *OffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) err return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0) } -func (_OffRamp *OffRampCaller) GetAllSourceChainConfig(opts *bind.CallOpts) ([]OffRampSourceChainConfig, error) { +func (_OffRamp *OffRampCaller) GetAllSourceChainConfig(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) { var out []interface{} err := _OffRamp.contract.Call(opts, &out, "getAllSourceChainConfig") if err != nil { - return *new([]OffRampSourceChainConfig), err + return *new([]uint64), *new([]OffRampSourceChainConfig), err } - out0 := *abi.ConvertType(out[0], new([]OffRampSourceChainConfig)).(*[]OffRampSourceChainConfig) + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + out1 := *abi.ConvertType(out[1], new([]OffRampSourceChainConfig)).(*[]OffRampSourceChainConfig) - return out0, err + return out0, out1, err } -func (_OffRamp *OffRampSession) GetAllSourceChainConfig() ([]OffRampSourceChainConfig, error) { +func (_OffRamp *OffRampSession) GetAllSourceChainConfig() ([]uint64, []OffRampSourceChainConfig, error) { return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) } -func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfig() ([]OffRampSourceChainConfig, error) { +func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfig() ([]uint64, []OffRampSourceChainConfig, error) { return _OffRamp.Contract.GetAllSourceChainConfig(&_OffRamp.CallOpts) } @@ -2479,7 +2480,7 @@ func (_OffRamp *OffRamp) Address() common.Address { type OffRampInterface interface { CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error - GetAllSourceChainConfig(opts *bind.CallOpts) ([]OffRampSourceChainConfig, error) + GetAllSourceChainConfig(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 8a2b065494..bd0756f08a 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -23,7 +23,7 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin 0b541232e49727e947dc164eadf35963c66e67576f21baa0ecaa06a8833148ed multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin 04b6b261dd71925670bf4d904aaf7bf08543452009feefb88e07d4c49d12e969 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 0b8c19d3dc18bae2859e7c8c4b52b97f6de1a849400cb713662cd9cedb22fdd4 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 7b95f8ea28863272e075c3e7aeef2c2600a8bddd48a2a4c21ff21402d72f6f57 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4f29f05261bdaf9b99e675c1169c0d5cba841b6dd7ca3a8997cc0d3cae7ba850 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2