From c94eac409f844582cf2f1f7987d2e740d51de525 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 14:46:05 +0000 Subject: [PATCH] Update gethwrappers --- .../ccip/generated/ccipClient/ccipClient.go | 58 ++++++++++++++----- .../generated/ccipReceiver/ccipReceiver.go | 58 ++++++++++++++----- .../ccip/generated/ccipSender/ccipSender.go | 58 ++++++++++++++----- .../ping_pong_demo/ping_pong_demo.go | 58 ++++++++++++++----- .../self_funded_ping_pong.go | 58 ++++++++++++++----- ...rapper-dependency-versions-do-not-edit.txt | 12 ++-- 6 files changed, 221 insertions(+), 81 deletions(-) diff --git a/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go b/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go index e0381ce5fc..9c06dba41a 100644 --- a/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go +++ b/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var CCIPClientMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162004ac138038062004ac1833981016040819052620000349162000569565b8181818033806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c28162000145565b5050506001600160a01b038116620000ed576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200013b576200013b6001600160a01b03821683600019620001f0565b505050506200068e565b336001600160a01b038216036200019f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002689190620005a8565b620002749190620005c2565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620002d091869190620002d616565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000325906001600160a01b038516908490620003ac565b805190915015620003a75780806020019051810190620003469190620005ea565b620003a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b505050565b6060620003bd8484600085620003c5565b949350505050565b606082471015620004285760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b031685876040516200044691906200063b565b60006040518083038185875af1925050503d806000811462000485576040519150601f19603f3d011682016040523d82523d6000602084013e6200048a565b606091505b5090925090506200049e87838387620004a9565b979650505050505050565b606083156200051d57825160000362000515576001600160a01b0385163b620005155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b5081620003bd565b620003bd8383815115620005345781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000659565b6001600160a01b03811681146200056657600080fd5b50565b600080604083850312156200057d57600080fd5b82516200058a8162000550565b60208401519092506200059d8162000550565b809150509250929050565b600060208284031215620005bb57600080fd5b5051919050565b80820180821115620005e457634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215620005fd57600080fd5b815180151581146200060e57600080fd5b9392505050565b60005b838110156200063257818101518382015260200162000618565b50506000910152565b600082516200064f81846020870162000615565b9190910192915050565b60208152600082518060208401526200067a81604085016020870162000615565b601f01601f19169190910160400192915050565b614423806200069e6000396000f3fe6080604052600436106101795760003560e01c806379ba5097116100cb578063b0f479a11161007f578063e89b448511610059578063e89b4485146104a8578063f2fde38b146104bb578063ff2deec3146104db57600080fd5b8063b0f479a11461043d578063cf6730f814610468578063e4ca87541461048857600080fd5b806385572ffb116100b057806385572ffb146103b15780638da5cb5b146103d15780639fe74e261461041d57600080fd5b806379ba50971461037c5780638462a2b91461039157600080fd5b80635075a9d41161012d5780636939cd97116101075780636939cd97146102d95780636d62d633146103065780636fef519e1461032657600080fd5b80635075a9d41461026b578063536c6bfa146102995780635e35359e146102b957600080fd5b806311e85dff1161015e57806311e85dff146101fb57806335f170ef1461021d5780634e12498b1461024b57600080fd5b806305bfe982146101855780630e958d6b146101cb57600080fd5b3661018057005b600080fd5b34801561019157600080fd5b506101b56101a036600461328d565b60096020526000908152604090205460ff1681565b6040516101c291906132d5565b60405180910390f35b3480156101d757600080fd5b506101eb6101e636600461332c565b610508565b60405190151581526020016101c2565b34801561020757600080fd5b5061021b6102163660046133d3565b610553565b005b34801561022957600080fd5b5061023d6102383660046133f0565b6106c7565b6040516101c292919061347b565b34801561025757600080fd5b5061021b6102663660046133d3565b6107f3565b34801561027757600080fd5b5061028b61028636600461328d565b6108bf565b6040519081526020016101c2565b3480156102a557600080fd5b5061021b6102b43660046134a9565b6108d2565b3480156102c557600080fd5b5061021b6102d43660046134d5565b610936565b3480156102e557600080fd5b506102f96102f436600461328d565b6109cb565b6040516101c29190613573565b34801561031257600080fd5b5061021b610321366004613607565b610bd6565b34801561033257600080fd5b5061036f6040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b6040516101c29190613637565b34801561038857600080fd5b5061021b610ef0565b34801561039d57600080fd5b5061021b6103ac366004613696565b610fed565b3480156103bd57600080fd5b5061021b6103cc366004613702565b61134e565b3480156103dd57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c2565b34801561042957600080fd5b5061021b61043836600461373d565b61165b565b34801561044957600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166103f8565b34801561047457600080fd5b5061021b610483366004613702565b6119db565b34801561049457600080fd5b5061021b6104a336600461328d565b611c22565b61028b6104b63660046138e5565b611e8c565b3480156104c757600080fd5b5061021b6104d63660046133d3565b6123c2565b3480156104e757600080fd5b506008546103f89073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260036020526040808220905160029091019061053790859085906139f2565b9081526040519081900360200190205460ff1690509392505050565b61055b6123d6565b60085473ffffffffffffffffffffffffffffffffffffffff16156105bc576105bc61059b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612459565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093551690156106695761066961062960025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612659565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b6003602052600090815260409020805481906106e290613a02565b80601f016020809104026020016040519081016040528092919081815260200182805461070e90613a02565b801561075b5780601f106107305761010080835404028352916020019161075b565b820191906000526020600020905b81548152906001019060200180831161073e57829003601f168201915b50505050509080600101805461077090613a02565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613a02565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905082565b6107fb6123d6565b73ffffffffffffffffffffffffffffffffffffffff8116610848576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b60006108cc60058361275d565b92915050565b6108da6123d6565b6108e48282612770565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b61093e6123d6565b61095f73ffffffffffffffffffffffffffffffffffffffff841683836128ca565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516109be91815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610a3a90613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6690613a02565b8015610ab35780601f10610a8857610100808354040283529160200191610ab3565b820191906000526020600020905b815481529060010190602001808311610a9657829003601f168201915b50505050508152602001600382018054610acc90613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890613a02565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610bc85760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610b73565b505050915250909392505050565b610bde6123d6565b6001610beb60058461275d565b14610c2a576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610c3a8260025b60059190612920565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610c8290613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054610cae90613a02565b8015610cfb5780601f10610cd057610100808354040283529160200191610cfb565b820191906000526020600020905b815481529060010190602001808311610cde57829003601f168201915b50505050508152602001600382018054610d1490613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4090613a02565b8015610d8d5780601f10610d6257610100808354040283529160200191610d8d565b820191906000526020600020905b815481529060010190602001808311610d7057829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e105760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610dbb565b5050505081525050905060005b816080015151811015610e9f57610e978383608001518381518110610e4457610e44613a55565b60200260200101516020015184608001518481518110610e6657610e66613a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166128ca9092919063ffffffff16565b600101610e1d565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610c21565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ff56123d6565b60005b81811015611198576003600084848481811061101657611016613a55565b90506020028101906110289190613a84565b6110369060208101906133f0565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061106d5761106d613a55565b905060200281019061107f9190613a84565b61108d906020810190613ac2565b60405161109b9291906139f2565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106110e2576110e2613a55565b90506020028101906110f49190613a84565b611102906020810190613ac2565b6040516111109291906139f2565b604051809103902083838381811061112a5761112a613a55565b905060200281019061113c9190613a84565b61114a9060208101906133f0565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051611188911515815260200190565b60405180910390a3600101610ff8565b5060005b83811015611347576001600360008787858181106111bc576111bc613a55565b90506020028101906111ce9190613a84565b6111dc9060208101906133f0565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061121357611213613a55565b90506020028101906112259190613a84565b611233906020810190613ac2565b6040516112419291906139f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061129157611291613a55565b90506020028101906112a39190613a84565b6112b1906020810190613ac2565b6040516112bf9291906139f2565b60405180910390208585838181106112d9576112d9613a55565b90506020028101906112eb9190613a84565b6112f99060208101906133f0565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816001604051611337911515815260200190565b60405180910390a360010161119c565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146113a1576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610c21565b6113b160408201602083016133f0565b6113be6040830183613ac2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600360205260409020805490935061141592509050613a02565b1590508061146b5750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516114569190613b27565b9081526040519081900360200190205460ff16155b156114a457806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610c219190613637565b6114b460408401602085016133f0565b67ffffffffffffffff81166000908152600360205260409020805481906114da90613a02565b9050600003611521576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c21565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f89061155d908890600401613c3b565b600060405180830381600087803b15801561157757600080fd5b505af1925050508015611588575060015b611628573d8080156115b6576040519150601f19603f3d011682016040523d82523d6000602084013e6115bb565b606091505b506115c886356001610c31565b508535600090815260046020526040902086906115e58282614015565b50506040518635907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f9061161a908490613637565b60405180910390a250611347565b6040518535907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050505050565b6116636123d6565b60005b818110156119d65782828281811061168057611680613a55565b9050602002810190611692919061410f565b6116a3906040810190602001614151565b61177657600360008484848181106116bd576116bd613a55565b90506020028101906116cf919061410f565b6116dd9060208101906133f0565b67ffffffffffffffff168152602081019190915260400160009081206117029161323f565b7f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991683838381811061173557611735613a55565b9050602002810190611747919061410f565b6117559060208101906133f0565b60405167ffffffffffffffff909116815260200160405180910390a16119ce565b82828281811061178857611788613a55565b905060200281019061179a919061410f565b6117a8906040810190613ac2565b90506000036117e3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008585858181106117fb576117fb613a55565b905060200281019061180d919061410f565b61181b9060208101906133f0565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020905083838381811061185157611851613a55565b9050602002810190611863919061410f565b611871906040810190613ac2565b829161187e919083613d99565b5083838381811061189157611891613a55565b90506020028101906118a3919061410f565b6118b1906060810190613ac2565b1590506118fc578383838181106118ca576118ca613a55565b90506020028101906118dc919061410f565b6118ea906060810190613ac2565b60018301916118fa919083613d99565b505b7f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721284848481811061192f5761192f613a55565b9050602002810190611941919061410f565b61194f9060208101906133f0565b85858581811061196157611961613a55565b9050602002810190611973919061410f565b611981906040810190613ac2565b87878781811061199357611993613a55565b90506020028101906119a5919061410f565b6119b3906060810190613ac2565b6040516119c495949392919061416e565b60405180910390a1505b600101611666565b505050565b333014611a14576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a236060830183613ac2565b810190611a3091906141b1565b9050600081604001516001811115611a4a57611a4a6132a6565b03611a5c57611a5882612935565b5050565b600181604001516001811115611a7457611a746132a6565b03611a58576000808260200151806020019051810190611a94919061425d565b915091506040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f0000000000000000000000815250604051602001611ade9190613637565b6040516020818303038152906040528051906020012082604051602001611b059190613637565b6040516020818303038152906040528051906020012014611b52576040517fae15168d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008281526009602052604090205460ff166002811115611b7757611b776132a6565b03611bb1576040517f33704b2800000000000000000000000000000000000000000000000000000000815260048101829052602401610c21565b60008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905590518281527fef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79910160405180910390a150505050565b6001611c2f60058361275d565b14611c69576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610c21565b611c74816000610c31565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611cbc90613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce890613a02565b8015611d355780601f10611d0a57610100808354040283529160200191611d35565b820191906000526020600020905b815481529060010190602001808311611d1857829003601f168201915b50505050508152602001600382018054611d4e90613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7a90613a02565b8015611dc75780601f10611d9c57610100808354040283529160200191611dc7565b820191906000526020600020905b815481529060010190602001808311611daa57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611e4a5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611df5565b50505050815250509050611e5d81612cab565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff8316600090815260036020526040812080548591908190611eb590613a02565b9050600003611efc576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c21565b6040805160a08101825267ffffffffffffffff8816600090815260036020529182208054829190611f2c90613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5890613a02565b8015611fa55780601f10611f7a57610100808354040283529160200191611fa5565b820191906000526020600020905b815481529060010190602001808311611f8857829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b16600090815260039092529020600101805460809092019161200690613a02565b80601f016020809104026020016040519081016040528092919081815260200182805461203290613a02565b801561207f5780601f106120545761010080835404028352916020019161207f565b820191906000526020600020905b81548152906001019060200180831161206257829003601f168201915b5050505050815250905060005b86518110156121dc576120fc33308984815181106120ac576120ac613a55565b6020026020010151602001518a85815181106120ca576120ca613a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612cb3909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff9091169088908390811061212c5761212c613a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146121d45760025487516121d49173ffffffffffffffffffffffffffffffffffffffff169089908490811061218557612185613a55565b6020026020010151602001518984815181106121a3576121a3613a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166124599092919063ffffffff16565b60010161208c565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded90612236908b9086906004016142de565b602060405180830381865afa158015612253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227791906143ab565b60085490915073ffffffffffffffffffffffffffffffffffffffff16156122bd576008546122bd9073ffffffffffffffffffffffffffffffffffffffff16333084612cb3565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f99116156122ef5760006122f1565b825b8a856040518463ffffffff1660e01b81526004016123109291906142de565b60206040518083038185885af115801561232e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061235391906143ab565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b6123ca6123d6565b6123d381612d11565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610c21565b565b8015806124f957506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156124d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f791906143ab565b155b612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610c21565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526119d69084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612e06565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156126d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f491906143ab565b6126fe91906143c4565b60405173ffffffffffffffffffffffffffffffffffffffff85166024820152604481018290529091506127579085907f095ea7b300000000000000000000000000000000000000000000000000000000906064016125d7565b50505050565b60006127698383612f12565b9392505050565b804710156127da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c21565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50509050806119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c21565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526119d69084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016125d7565b600061292d848484612f9c565b949350505050565b6040805160008082526020820190925281612972565b604080518082019091526000808252602082015281526020019060019003908161294b5790505b50905060006040518060a001604052808480604001906129929190613ac2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080518082018252601581527f4d4553534147455f41434b4e4f574c45444745445f0000000000000000000000602082810191909152915192820192612a1392883591016143d7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152908252602082810186905260085473ffffffffffffffffffffffffffffffffffffffff1683830152606090920191600391600091612a839189019089016133f0565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054612ab390613a02565b80601f0160208091040260200160405190810160405280929190818152602001828054612adf90613a02565b8015612b2c5780601f10612b0157610100808354040283529160200191612b2c565b820191906000526020600020905b815481529060010190602001808311612b0f57829003601f168201915b50505091909252505060025490915060009073ffffffffffffffffffffffffffffffffffffffff166320487ded612b6960408701602088016133f0565b846040518363ffffffff1660e01b8152600401612b879291906142de565b602060405180830381865afa158015612ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc891906143ab565b60025460085491925060009173ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612c00576000612c02565b835b612c126040890160208a016133f0565b866040518463ffffffff1660e01b8152600401612c309291906142de565b60206040518083038185885af1158015612c4e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c7391906143ab565b60405190915081908635907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b237290600090a35050505050565b6123d36123d6565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526127579085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016125d7565b3373ffffffffffffffffffffffffffffffffffffffff821603612d90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c21565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612e68826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fb99092919063ffffffff16565b8051909150156119d65780806020019051810190612e8691906143f9565b6119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c21565b600081815260028301602052604081205480151580612f365750612f368484612fc8565b612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610c21565b6000828152600284016020526040812082905561292d8484612fd4565b606061292d8484600085612fe0565b600061276983836130f9565b60006127698383613111565b606082471015613072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610c21565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161309b9190613b27565b60006040518083038185875af1925050503d80600081146130d8576040519150601f19603f3d011682016040523d82523d6000602084013e6130dd565b606091505b50915091506130ee87838387613160565b979650505050505050565b60008181526001830160205260408120541515612769565b6000818152600183016020526040812054613158575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108cc565b5060006108cc565b606083156131f65782516000036131ef5773ffffffffffffffffffffffffffffffffffffffff85163b6131ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c21565b508161292d565b61292d838381511561320b5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c219190613637565b50805461324b90613a02565b6000825580601f1061325b575050565b601f0160209004906000526020600020908101906123d391905b808211156132895760008155600101613275565b5090565b60006020828403121561329f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613310577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff811681146123d357600080fd5b60008060006040848603121561334157600080fd5b833561334c81613316565b9250602084013567ffffffffffffffff8082111561336957600080fd5b818601915086601f83011261337d57600080fd5b81358181111561338c57600080fd5b87602082850101111561339e57600080fd5b6020830194508093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146123d357600080fd5b6000602082840312156133e557600080fd5b8135612769816133b1565b60006020828403121561340257600080fd5b813561276981613316565b60005b83811015613428578181015183820152602001613410565b50506000910152565b6000815180845261344981602086016020860161340d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600061348e6040830185613431565b82810360208401526134a08185613431565b95945050505050565b600080604083850312156134bc57600080fd5b82356134c7816133b1565b946020939093013593505050565b6000806000606084860312156134ea57600080fd5b83356134f5816133b1565b92506020840135613505816133b1565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015613568578151805173ffffffffffffffffffffffffffffffffffffffff168852830151838801526040909601959082019060010161352b565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a060608401526135ad60c0840182613431565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526135e98383613431565b925060808601519150808584030160a0860152506134a08282613516565b6000806040838503121561361a57600080fd5b82359150602083013561362c816133b1565b809150509250929050565b6020815260006127696020830184613431565b60008083601f84011261365c57600080fd5b50813567ffffffffffffffff81111561367457600080fd5b6020830191508360208260051b850101111561368f57600080fd5b9250929050565b600080600080604085870312156136ac57600080fd5b843567ffffffffffffffff808211156136c457600080fd5b6136d08883890161364a565b909650945060208701359150808211156136e957600080fd5b506136f68782880161364a565b95989497509550505050565b60006020828403121561371457600080fd5b813567ffffffffffffffff81111561372b57600080fd5b820160a0818503121561276957600080fd5b6000806020838503121561375057600080fd5b823567ffffffffffffffff81111561376757600080fd5b6137738582860161364a565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156137d1576137d161377f565b60405290565b6040516060810167ffffffffffffffff811182821017156137d1576137d161377f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156138415761384161377f565b604052919050565b600067ffffffffffffffff8211156138635761386361377f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126138a057600080fd5b81356138b36138ae82613849565b6137fa565b8181528460208386010111156138c857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156138fa57600080fd5b833561390581613316565b925060208481013567ffffffffffffffff8082111561392357600080fd5b818701915087601f83011261393757600080fd5b8135818111156139495761394961377f565b613957848260051b016137fa565b81815260069190911b8301840190848101908a83111561397657600080fd5b938501935b828510156139c2576040858c0312156139945760008081fd5b61399c6137ae565b85356139a7816133b1565b8152858701358782015282526040909401939085019061397b565b9650505060408701359250808311156139da57600080fd5b50506139e88682870161388f565b9150509250925092565b8183823760009101908152919050565b600181811c90821680613a1657607f821691505b602082108103613a4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613ab857600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613af757600080fd5b83018035915067ffffffffffffffff821115613b1257600080fd5b60200191503681900382131561368f57600080fd5b60008251613ab881846020870161340d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613b6e57600080fd5b830160208101925035905067ffffffffffffffff811115613b8e57600080fd5b80360382131561368f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015613568578135613c09816133b1565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613bf6565b602081528135602082015260006020830135613c5681613316565b67ffffffffffffffff8082166040850152613c746040860186613b39565b925060a06060860152613c8b60c086018483613b9d565b925050613c9b6060860186613b39565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613cd1858385613b9d565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613d0a57600080fd5b60209288019283019235915083821115613d2357600080fd5b8160061b3603831315613d3557600080fd5b8685030160a08701526130ee848284613be6565b601f8211156119d6576000816000526020600020601f850160051c81016020861015613d725750805b601f850160051c820191505b81811015613d9157828155600101613d7e565b505050505050565b67ffffffffffffffff831115613db157613db161377f565b613dc583613dbf8354613a02565b83613d49565b6000601f841160018114613e175760008515613de15750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611347565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613e665786850135825560209485019460019092019101613e46565b5086821015613ea1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8135613eed816133b1565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b68010000000000000000831115613f5357613f5361377f565b805483825580841015613fe05760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168314613f9457613f94613eb3565b8086168614613fa557613fa5613eb3565b5060008360005260206000208360011b81018760011b820191505b80821015613fdb578282558284830155600282019150613fc0565b505050505b5060008181526020812083915b85811015613d9157613fff8383613ee2565b6040929092019160029190910190600101613fed565b8135815560018101602083013561402b81613316565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000084541617835561406b6040860186613ac2565b9350915061407d838360028701613d99565b61408a6060860186613ac2565b9350915061409c838360038701613d99565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030183126140d357600080fd5b9184019182359150808211156140e857600080fd5b506020820191508060061b360382131561410157600080fd5b612757818360048601613f3a565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613ab857600080fd5b80151581146123d357600080fd5b60006020828403121561416357600080fd5b813561276981614143565b67ffffffffffffffff86168152606060208201526000614192606083018688613b9d565b82810360408401526141a5818587613b9d565b98975050505050505050565b6000602082840312156141c357600080fd5b813567ffffffffffffffff808211156141db57600080fd5b90830190606082860312156141ef57600080fd5b6141f76137d7565b82358281111561420657600080fd5b6142128782860161388f565b82525060208301358281111561422757600080fd5b6142338782860161388f565b602083015250604083013592506002831061424d57600080fd5b6040810192909252509392505050565b6000806040838503121561427057600080fd5b825167ffffffffffffffff81111561428757600080fd5b8301601f8101851361429857600080fd5b80516142a66138ae82613849565b8181528660208385010111156142bb57600080fd5b6142cc82602083016020860161340d565b60209590950151949694955050505050565b67ffffffffffffffff83168152604060208201526000825160a0604084015261430a60e0840182613431565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526143468383613431565b925060408601519150808584030160808601526143638383613516565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506143a18282613431565b9695505050505050565b6000602082840312156143bd57600080fd5b5051919050565b808201808211156108cc576108cc613eb3565b6040815260006143ea6040830185613431565b90508260208301529392505050565b60006020828403121561440b57600080fd5b81516127698161414356fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162004aa838038062004aa8833981016040819052620000349162000569565b8181818033806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c28162000145565b5050506001600160a01b038116620000ed576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200013b576200013b6001600160a01b03821683600019620001f0565b505050506200068e565b336001600160a01b038216036200019f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002689190620005a8565b620002749190620005c2565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620002d091869190620002d616565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000325906001600160a01b038516908490620003ac565b805190915015620003a75780806020019051810190620003469190620005ea565b620003a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b505050565b6060620003bd8484600085620003c5565b949350505050565b606082471015620004285760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b031685876040516200044691906200063b565b60006040518083038185875af1925050503d806000811462000485576040519150601f19603f3d011682016040523d82523d6000602084013e6200048a565b606091505b5090925090506200049e87838387620004a9565b979650505050505050565b606083156200051d57825160000362000515576001600160a01b0385163b620005155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b5081620003bd565b620003bd8383815115620005345781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000659565b6001600160a01b03811681146200056657600080fd5b50565b600080604083850312156200057d57600080fd5b82516200058a8162000550565b60208401519092506200059d8162000550565b809150509250929050565b600060208284031215620005bb57600080fd5b5051919050565b80820180821115620005e457634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215620005fd57600080fd5b815180151581146200060e57600080fd5b9392505050565b60005b838110156200063257818101518382015260200162000618565b50506000910152565b600082516200064f81846020870162000615565b9190910192915050565b60208152600082518060208401526200067a81604085016020870162000615565b601f01601f19169190910160400192915050565b61440a806200069e6000396000f3fe6080604052600436106101795760003560e01c806379ba5097116100cb578063b0f479a11161007f578063e89b448511610059578063e89b4485146104a8578063f2fde38b146104bb578063ff2deec3146104db57600080fd5b8063b0f479a11461043d578063cf6730f814610468578063e4ca87541461048857600080fd5b806385572ffb116100b057806385572ffb146103b15780638da5cb5b146103d15780639fe74e261461041d57600080fd5b806379ba50971461037c5780638462a2b91461039157600080fd5b80635075a9d41161012d5780636939cd97116101075780636939cd97146102d95780636d62d633146103065780636fef519e1461032657600080fd5b80635075a9d41461026b578063536c6bfa146102995780635e35359e146102b957600080fd5b806311e85dff1161015e57806311e85dff146101fb57806335f170ef1461021d5780634e12498b1461024b57600080fd5b806305bfe982146101855780630e958d6b146101cb57600080fd5b3661018057005b600080fd5b34801561019157600080fd5b506101b56101a03660046132a3565b60096020526000908152604090205460ff1681565b6040516101c291906132eb565b60405180910390f35b3480156101d757600080fd5b506101eb6101e6366004613342565b610508565b60405190151581526020016101c2565b34801561020757600080fd5b5061021b6102163660046133e9565b610553565b005b34801561022957600080fd5b5061023d610238366004613406565b6106c7565b6040516101c2929190613491565b34801561025757600080fd5b5061021b6102663660046133e9565b6107f3565b34801561027757600080fd5b5061028b6102863660046132a3565b6108bf565b6040519081526020016101c2565b3480156102a557600080fd5b5061021b6102b43660046134bf565b6108d2565b3480156102c557600080fd5b5061021b6102d43660046134eb565b610936565b3480156102e557600080fd5b506102f96102f43660046132a3565b6109cb565b6040516101c29190613589565b34801561031257600080fd5b5061021b61032136600461361d565b610bd6565b34801561033257600080fd5b5061036f6040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b6040516101c2919061364d565b34801561038857600080fd5b5061021b610ef0565b34801561039d57600080fd5b5061021b6103ac3660046136ac565b610fed565b3480156103bd57600080fd5b5061021b6103cc366004613718565b61134e565b3480156103dd57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c2565b34801561042957600080fd5b5061021b610438366004613753565b61165b565b34801561044957600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166103f8565b34801561047457600080fd5b5061021b610483366004613718565b6119f1565b34801561049457600080fd5b5061021b6104a33660046132a3565b611c38565b61028b6104b63660046138fb565b611ea2565b3480156104c757600080fd5b5061021b6104d63660046133e9565b6123d8565b3480156104e757600080fd5b506008546103f89073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906105379085908590613a08565b9081526040519081900360200190205460ff1690509392505050565b61055b6123ec565b60085473ffffffffffffffffffffffffffffffffffffffff16156105bc576105bc61059b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff1690600061246f565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093551690156106695761066961062960025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61266f565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b6003602052600090815260409020805481906106e290613a18565b80601f016020809104026020016040519081016040528092919081815260200182805461070e90613a18565b801561075b5780601f106107305761010080835404028352916020019161075b565b820191906000526020600020905b81548152906001019060200180831161073e57829003601f168201915b50505050509080600101805461077090613a18565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613a18565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905082565b6107fb6123ec565b73ffffffffffffffffffffffffffffffffffffffff8116610848576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b60006108cc600583612773565b92915050565b6108da6123ec565b6108e48282612786565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b61093e6123ec565b61095f73ffffffffffffffffffffffffffffffffffffffff841683836128e0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516109be91815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610a3a90613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6690613a18565b8015610ab35780601f10610a8857610100808354040283529160200191610ab3565b820191906000526020600020905b815481529060010190602001808311610a9657829003601f168201915b50505050508152602001600382018054610acc90613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890613a18565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610bc85760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610b73565b505050915250909392505050565b610bde6123ec565b6001610beb600584612773565b14610c2a576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610c3a8260025b60059190612936565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610c8290613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610cae90613a18565b8015610cfb5780601f10610cd057610100808354040283529160200191610cfb565b820191906000526020600020905b815481529060010190602001808311610cde57829003601f168201915b50505050508152602001600382018054610d1490613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4090613a18565b8015610d8d5780601f10610d6257610100808354040283529160200191610d8d565b820191906000526020600020905b815481529060010190602001808311610d7057829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e105760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610dbb565b5050505081525050905060005b816080015151811015610e9f57610e978383608001518381518110610e4457610e44613a6b565b60200260200101516020015184608001518481518110610e6657610e66613a6b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166128e09092919063ffffffff16565b600101610e1d565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610c21565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ff56123ec565b60005b81811015611198576003600084848481811061101657611016613a6b565b90506020028101906110289190613a9a565b611036906020810190613406565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061106d5761106d613a6b565b905060200281019061107f9190613a9a565b61108d906020810190613ad8565b60405161109b929190613a08565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106110e2576110e2613a6b565b90506020028101906110f49190613a9a565b611102906020810190613ad8565b604051611110929190613a08565b604051809103902083838381811061112a5761112a613a6b565b905060200281019061113c9190613a9a565b61114a906020810190613406565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051611188911515815260200190565b60405180910390a3600101610ff8565b5060005b83811015611347576001600360008787858181106111bc576111bc613a6b565b90506020028101906111ce9190613a9a565b6111dc906020810190613406565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061121357611213613a6b565b90506020028101906112259190613a9a565b611233906020810190613ad8565b604051611241929190613a08565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061129157611291613a6b565b90506020028101906112a39190613a9a565b6112b1906020810190613ad8565b6040516112bf929190613a08565b60405180910390208585838181106112d9576112d9613a6b565b90506020028101906112eb9190613a9a565b6112f9906020810190613406565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816001604051611337911515815260200190565b60405180910390a360010161119c565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146113a1576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610c21565b6113b16040820160208301613406565b6113be6040830183613ad8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600360205260409020805490935061141592509050613a18565b1590508061146b5750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516114569190613b3d565b9081526040519081900360200190205460ff16155b156114a457806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610c21919061364d565b6114b46040840160208501613406565b67ffffffffffffffff81166000908152600360205260409020805481906114da90613a18565b9050600003611521576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c21565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f89061155d908890600401613c51565b600060405180830381600087803b15801561157757600080fd5b505af1925050508015611588575060015b611628573d8080156115b6576040519150601f19603f3d011682016040523d82523d6000602084013e6115bb565b606091505b506115c886356001610c31565b508535600090815260046020526040902086906115e5828261402b565b50506040518635907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f9061161a90849061364d565b60405180910390a250611347565b6040518535907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050505050565b6116636123ec565b60005b818110156119ec5782828281811061168057611680613a6b565b90506020028101906116929190614125565b6116a3906040810190602001614167565b61176f57600360008484848181106116bd576116bd613a6b565b90506020028101906116cf9190614125565b6116dd906020810190613406565b67ffffffffffffffff1681526020810191909152604001600090812061170291613255565b82828281811061171457611714613a6b565b90506020028101906117269190614125565b611734906020810190613406565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a26119e4565b82828281811061178157611781613a6b565b90506020028101906117939190614125565b6117a1906040810190613ad8565b90506000036117dc576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008585858181106117f4576117f4613a6b565b90506020028101906118069190614125565b611814906020810190613406565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020905083838381811061184a5761184a613a6b565b905060200281019061185c9190614125565b61186a906040810190613ad8565b8291611877919083613daf565b5083838381811061188a5761188a613a6b565b905060200281019061189c9190614125565b6118aa906060810190613ad8565b1590506118f5578383838181106118c3576118c3613a6b565b90506020028101906118d59190614125565b6118e3906060810190613ad8565b60018301916118f3919083613daf565b505b83838381811061190757611907613a6b565b90506020028101906119199190614125565b611927906040810190613ad8565b604051611935929190613a08565b604051809103902084848481811061194f5761194f613a6b565b90506020028101906119619190614125565b61196f906020810190613406565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a872128686868181106119ac576119ac613a6b565b90506020028101906119be9190614125565b6119cc906060810190613ad8565b6040516119da929190614184565b60405180910390a3505b600101611666565b505050565b333014611a2a576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a396060830183613ad8565b810190611a469190614198565b9050600081604001516001811115611a6057611a606132bc565b03611a7257611a6e8261294b565b5050565b600181604001516001811115611a8a57611a8a6132bc565b03611a6e576000808260200151806020019051810190611aaa9190614244565b915091506040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f0000000000000000000000815250604051602001611af4919061364d565b6040516020818303038152906040528051906020012082604051602001611b1b919061364d565b6040516020818303038152906040528051906020012014611b68576040517fae15168d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008281526009602052604090205460ff166002811115611b8d57611b8d6132bc565b03611bc7576040517f33704b2800000000000000000000000000000000000000000000000000000000815260048101829052602401610c21565b60008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905590518281527fef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79910160405180910390a150505050565b6001611c45600583612773565b14611c7f576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610c21565b611c8a816000610c31565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611cd290613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054611cfe90613a18565b8015611d4b5780601f10611d2057610100808354040283529160200191611d4b565b820191906000526020600020905b815481529060010190602001808311611d2e57829003601f168201915b50505050508152602001600382018054611d6490613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9090613a18565b8015611ddd5780601f10611db257610100808354040283529160200191611ddd565b820191906000526020600020905b815481529060010190602001808311611dc057829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611e605760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611e0b565b50505050815250509050611e7381612cc1565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff8316600090815260036020526040812080548591908190611ecb90613a18565b9050600003611f12576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c21565b6040805160a08101825267ffffffffffffffff8816600090815260036020529182208054829190611f4290613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054611f6e90613a18565b8015611fbb5780601f10611f9057610100808354040283529160200191611fbb565b820191906000526020600020905b815481529060010190602001808311611f9e57829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b16600090815260039092529020600101805460809092019161201c90613a18565b80601f016020809104026020016040519081016040528092919081815260200182805461204890613a18565b80156120955780601f1061206a57610100808354040283529160200191612095565b820191906000526020600020905b81548152906001019060200180831161207857829003601f168201915b5050505050815250905060005b86518110156121f25761211233308984815181106120c2576120c2613a6b565b6020026020010151602001518a85815181106120e0576120e0613a6b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612cc9909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff9091169088908390811061214257612142613a6b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146121ea5760025487516121ea9173ffffffffffffffffffffffffffffffffffffffff169089908490811061219b5761219b613a6b565b6020026020010151602001518984815181106121b9576121b9613a6b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1661246f9092919063ffffffff16565b6001016120a2565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded9061224c908b9086906004016142c5565b602060405180830381865afa158015612269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228d9190614392565b60085490915073ffffffffffffffffffffffffffffffffffffffff16156122d3576008546122d39073ffffffffffffffffffffffffffffffffffffffff16333084612cc9565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612305576000612307565b825b8a856040518463ffffffff1660e01b81526004016123269291906142c5565b60206040518083038185885af1158015612344573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123699190614392565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b6123e06123ec565b6123e981612d27565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610c21565b565b80158061250f57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156124e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250d9190614392565b155b61259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610c21565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526119ec9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612e1c565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156126e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270a9190614392565b61271491906143ab565b60405173ffffffffffffffffffffffffffffffffffffffff851660248201526044810182905290915061276d9085907f095ea7b300000000000000000000000000000000000000000000000000000000906064016125ed565b50505050565b600061277f8383612f28565b9392505050565b804710156127f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c21565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461284a576040519150601f19603f3d011682016040523d82523d6000602084013e61284f565b606091505b50509050806119ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c21565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526119ec9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016125ed565b6000612943848484612fb2565b949350505050565b6040805160008082526020820190925281612988565b60408051808201909152600080825260208201528152602001906001900390816129615790505b50905060006040518060a001604052808480604001906129a89190613ad8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080518082018252601581527f4d4553534147455f41434b4e4f574c45444745445f0000000000000000000000602082810191909152915192820192612a2992883591016143be565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152908252602082810186905260085473ffffffffffffffffffffffffffffffffffffffff1683830152606090920191600391600091612a99918901908901613406565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054612ac990613a18565b80601f0160208091040260200160405190810160405280929190818152602001828054612af590613a18565b8015612b425780601f10612b1757610100808354040283529160200191612b42565b820191906000526020600020905b815481529060010190602001808311612b2557829003601f168201915b50505091909252505060025490915060009073ffffffffffffffffffffffffffffffffffffffff166320487ded612b7f6040870160208801613406565b846040518363ffffffff1660e01b8152600401612b9d9291906142c5565b602060405180830381865afa158015612bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bde9190614392565b60025460085491925060009173ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612c16576000612c18565b835b612c286040890160208a01613406565b866040518463ffffffff1660e01b8152600401612c469291906142c5565b60206040518083038185885af1158015612c64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c899190614392565b60405190915081908635907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b237290600090a35050505050565b6123e96123ec565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261276d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016125ed565b3373ffffffffffffffffffffffffffffffffffffffff821603612da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c21565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612e7e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fcf9092919063ffffffff16565b8051909150156119ec5780806020019051810190612e9c91906143e0565b6119ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c21565b600081815260028301602052604081205480151580612f4c5750612f4c8484612fde565b61277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610c21565b600082815260028401602052604081208290556129438484612fea565b60606129438484600085612ff6565b600061277f838361310f565b600061277f8383613127565b606082471015613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610c21565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130b19190613b3d565b60006040518083038185875af1925050503d80600081146130ee576040519150601f19603f3d011682016040523d82523d6000602084013e6130f3565b606091505b509150915061310487838387613176565b979650505050505050565b6000818152600183016020526040812054151561277f565b600081815260018301602052604081205461316e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108cc565b5060006108cc565b6060831561320c5782516000036132055773ffffffffffffffffffffffffffffffffffffffff85163b613205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c21565b5081612943565b61294383838151156132215781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c21919061364d565b50805461326190613a18565b6000825580601f10613271575050565b601f0160209004906000526020600020908101906123e991905b8082111561329f576000815560010161328b565b5090565b6000602082840312156132b557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613326577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff811681146123e957600080fd5b60008060006040848603121561335757600080fd5b83356133628161332c565b9250602084013567ffffffffffffffff8082111561337f57600080fd5b818601915086601f83011261339357600080fd5b8135818111156133a257600080fd5b8760208285010111156133b457600080fd5b6020830194508093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146123e957600080fd5b6000602082840312156133fb57600080fd5b813561277f816133c7565b60006020828403121561341857600080fd5b813561277f8161332c565b60005b8381101561343e578181015183820152602001613426565b50506000910152565b6000815180845261345f816020860160208601613423565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6040815260006134a46040830185613447565b82810360208401526134b68185613447565b95945050505050565b600080604083850312156134d257600080fd5b82356134dd816133c7565b946020939093013593505050565b60008060006060848603121561350057600080fd5b833561350b816133c7565b9250602084013561351b816133c7565b929592945050506040919091013590565b60008151808452602080850194506020840160005b8381101561357e578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613541565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a060608401526135c360c0840182613447565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526135ff8383613447565b925060808601519150808584030160a0860152506134b6828261352c565b6000806040838503121561363057600080fd5b823591506020830135613642816133c7565b809150509250929050565b60208152600061277f6020830184613447565b60008083601f84011261367257600080fd5b50813567ffffffffffffffff81111561368a57600080fd5b6020830191508360208260051b85010111156136a557600080fd5b9250929050565b600080600080604085870312156136c257600080fd5b843567ffffffffffffffff808211156136da57600080fd5b6136e688838901613660565b909650945060208701359150808211156136ff57600080fd5b5061370c87828801613660565b95989497509550505050565b60006020828403121561372a57600080fd5b813567ffffffffffffffff81111561374157600080fd5b820160a0818503121561277f57600080fd5b6000806020838503121561376657600080fd5b823567ffffffffffffffff81111561377d57600080fd5b61378985828601613660565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156137e7576137e7613795565b60405290565b6040516060810167ffffffffffffffff811182821017156137e7576137e7613795565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561385757613857613795565b604052919050565b600067ffffffffffffffff82111561387957613879613795565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126138b657600080fd5b81356138c96138c48261385f565b613810565b8181528460208386010111156138de57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561391057600080fd5b833561391b8161332c565b925060208481013567ffffffffffffffff8082111561393957600080fd5b818701915087601f83011261394d57600080fd5b81358181111561395f5761395f613795565b61396d848260051b01613810565b81815260069190911b8301840190848101908a83111561398c57600080fd5b938501935b828510156139d8576040858c0312156139aa5760008081fd5b6139b26137c4565b85356139bd816133c7565b81528587013587820152825260409094019390850190613991565b9650505060408701359250808311156139f057600080fd5b50506139fe868287016138a5565b9150509250925092565b8183823760009101908152919050565b600181811c90821680613a2c57607f821691505b602082108103613a65577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613ace57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613b0d57600080fd5b83018035915067ffffffffffffffff821115613b2857600080fd5b6020019150368190038213156136a557600080fd5b60008251613ace818460208701613423565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613b8457600080fd5b830160208101925035905067ffffffffffffffff811115613ba457600080fd5b8036038213156136a557600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b8581101561357e578135613c1f816133c7565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613c0c565b602081528135602082015260006020830135613c6c8161332c565b67ffffffffffffffff8082166040850152613c8a6040860186613b4f565b925060a06060860152613ca160c086018483613bb3565b925050613cb16060860186613b4f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613ce7858385613bb3565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613d2057600080fd5b60209288019283019235915083821115613d3957600080fd5b8160061b3603831315613d4b57600080fd5b8685030160a0870152613104848284613bfc565b601f8211156119ec576000816000526020600020601f850160051c81016020861015613d885750805b601f850160051c820191505b81811015613da757828155600101613d94565b505050505050565b67ffffffffffffffff831115613dc757613dc7613795565b613ddb83613dd58354613a18565b83613d5f565b6000601f841160018114613e2d5760008515613df75750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611347565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613e7c5786850135825560209485019460019092019101613e5c565b5086821015613eb7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8135613f03816133c7565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b68010000000000000000831115613f6957613f69613795565b805483825580841015613ff65760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168314613faa57613faa613ec9565b8086168614613fbb57613fbb613ec9565b5060008360005260206000208360011b81018760011b820191505b80821015613ff1578282558284830155600282019150613fd6565b505050505b5060008181526020812083915b85811015613da7576140158383613ef8565b6040929092019160029190910190600101614003565b813581556001810160208301356140418161332c565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556140816040860186613ad8565b93509150614093838360028701613daf565b6140a06060860186613ad8565b935091506140b2838360038701613daf565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030183126140e957600080fd5b9184019182359150808211156140fe57600080fd5b506020820191508060061b360382131561411757600080fd5b61276d818360048601613f50565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613ace57600080fd5b80151581146123e957600080fd5b60006020828403121561417957600080fd5b813561277f81614159565b602081526000612943602083018486613bb3565b6000602082840312156141aa57600080fd5b813567ffffffffffffffff808211156141c257600080fd5b90830190606082860312156141d657600080fd5b6141de6137ed565b8235828111156141ed57600080fd5b6141f9878286016138a5565b82525060208301358281111561420e57600080fd5b61421a878286016138a5565b602083015250604083013592506002831061423457600080fd5b6040810192909252509392505050565b6000806040838503121561425757600080fd5b825167ffffffffffffffff81111561426e57600080fd5b8301601f8101851361427f57600080fd5b805161428d6138c48261385f565b8181528660208385010111156142a257600080fd5b6142b3826020830160208601613423565b60209590950151949694955050505050565b67ffffffffffffffff83168152604060208201526000825160a060408401526142f160e0840182613447565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08085840301606086015261432d8383613447565b9250604086015191508085840301608086015261434a838361352c565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506143888282613447565b9695505050505050565b6000602082840312156143a457600080fd5b5051919050565b808201808211156108cc576108cc613ec9565b6040815260006143d16040830185613447565b90508260208301529392505050565b6000602082840312156143f257600080fd5b815161277f8161415956fea164736f6c6343000818000a", } var CCIPClientABI = CCIPClientMetaData.ABI @@ -905,23 +905,41 @@ func (it *CCIPClientChainAddedIterator) Close() error { type CCIPClientChainAdded struct { RemoteChainSelector uint64 - Recipient []byte + Recipient common.Hash ExtraArgsBytes []byte Raw types.Log } -func (_CCIPClient *CCIPClientFilterer) FilterChainAdded(opts *bind.FilterOpts) (*CCIPClientChainAddedIterator, error) { +func (_CCIPClient *CCIPClientFilterer) FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*CCIPClientChainAddedIterator, error) { - logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "ChainAdded") + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } return &CCIPClientChainAddedIterator{contract: _CCIPClient.contract, event: "ChainAdded", logs: logs, sub: sub}, nil } -func (_CCIPClient *CCIPClientFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPClientChainAdded) (event.Subscription, error) { +func (_CCIPClient *CCIPClientFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPClientChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } - logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "ChainAdded") + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -1027,18 +1045,28 @@ type CCIPClientChainRemoved struct { Raw types.Log } -func (_CCIPClient *CCIPClientFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*CCIPClientChainRemovedIterator, error) { +func (_CCIPClient *CCIPClientFilterer) FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*CCIPClientChainRemovedIterator, error) { - logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "ChainRemoved") + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } return &CCIPClientChainRemovedIterator{contract: _CCIPClient.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil } -func (_CCIPClient *CCIPClientFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPClientChainRemoved) (event.Subscription, error) { +func (_CCIPClient *CCIPClientFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPClientChainRemoved, removeChainSelector []uint64) (event.Subscription, error) { + + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } - logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "ChainRemoved") + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } @@ -2672,15 +2700,15 @@ type CCIPClientInterface interface { ParseCCIPRouterModified(log types.Log) (*CCIPClientCCIPRouterModified, error) - FilterChainAdded(opts *bind.FilterOpts) (*CCIPClientChainAddedIterator, error) + FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*CCIPClientChainAddedIterator, error) - WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPClientChainAdded) (event.Subscription, error) + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPClientChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) ParseChainAdded(log types.Log) (*CCIPClientChainAdded, error) - FilterChainRemoved(opts *bind.FilterOpts) (*CCIPClientChainRemovedIterator, error) + FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*CCIPClientChainRemovedIterator, error) - WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPClientChainRemoved) (event.Subscription, error) + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPClientChainRemoved, removeChainSelector []uint64) (event.Subscription, error) ParseChainRemoved(log types.Log) (*CCIPClientChainRemoved, error) diff --git a/core/gethwrappers/ccip/generated/ccipReceiver/ccipReceiver.go b/core/gethwrappers/ccip/generated/ccipReceiver/ccipReceiver.go index 5853da23fb..25a0cfc0fb 100644 --- a/core/gethwrappers/ccip/generated/ccipReceiver/ccipReceiver.go +++ b/core/gethwrappers/ccip/generated/ccipReceiver/ccipReceiver.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var CCIPReceiverMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162003067380380620030678339810160408190526200003491620001bc565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000111565b5050506001600160a01b038116620000ea576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905550620001ee565b336001600160a01b038216036200016b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001cf57600080fd5b81516001600160a01b0381168114620001e757600080fd5b9392505050565b612e6980620001fe6000396000f3fe6080604052600436106101125760003560e01c806379ba5097116100a55780639fe74e2611610074578063cf6730f811610059578063cf6730f81461034a578063e4ca87541461036a578063f2fde38b1461038a57600080fd5b80639fe74e26146102ff578063b0f479a11461031f57600080fd5b806379ba50971461025e5780638462a2b91461027357806385572ffb146102935780638da5cb5b146102b357600080fd5b8063536c6bfa116100e1578063536c6bfa146101d15780635e35359e146101f15780636939cd97146102115780636d62d6331461023e57600080fd5b80630e958d6b1461011e57806335f170ef146101535780634e12498b146101815780635075a9d4146101a357600080fd5b3661011957005b600080fd5b34801561012a57600080fd5b5061013e6101393660046121e6565b6103aa565b60405190151581526020015b60405180910390f35b34801561015f57600080fd5b5061017361016e36600461226b565b6103f5565b60405161014a9291906122f6565b34801561018d57600080fd5b506101a161019c366004612346565b610521565b005b3480156101af57600080fd5b506101c36101be366004612363565b6105ed565b60405190815260200161014a565b3480156101dd57600080fd5b506101a16101ec36600461237c565b610600565b3480156101fd57600080fd5b506101a161020c3660046123a8565b610664565b34801561021d57600080fd5b5061023161022c366004612363565b6106f9565b60405161014a91906123e9565b34801561024a57600080fd5b506101a16102593660046124d0565b610904565b34801561026a57600080fd5b506101a1610c1e565b34801561027f57600080fd5b506101a161028e36600461254c565b610d1b565b34801561029f57600080fd5b506101a16102ae3660046125b8565b61107c565b3480156102bf57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014a565b34801561030b57600080fd5b506101a161031a3660046125f3565b611285565b34801561032b57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102da565b34801561035657600080fd5b506101a16103653660046125b8565b611600565b34801561037657600080fd5b506101a1610385366004612363565b61173c565b34801561039657600080fd5b506101a16103a5366004612346565b6119a6565b67ffffffffffffffff831660009081526003602052604080822090516002909101906103d99085908590612635565b9081526040519081900360200190205460ff1690509392505050565b60036020526000908152604090208054819061041090612645565b80601f016020809104026020016040519081016040528092919081815260200182805461043c90612645565b80156104895780601f1061045e57610100808354040283529160200191610489565b820191906000526020600020905b81548152906001019060200180831161046c57829003601f168201915b50505050509080600101805461049e90612645565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90612645565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905082565b6105296119ba565b73ffffffffffffffffffffffffffffffffffffffff8116610576576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b60006105fa600583611a3d565b92915050565b6106086119ba565b6106128282611a50565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b61066c6119ba565b61068d73ffffffffffffffffffffffffffffffffffffffff84168383611baa565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516106ec91815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff169183019190915260028101805493949293919284019161076890612645565b80601f016020809104026020016040519081016040528092919081815260200182805461079490612645565b80156107e15780601f106107b6576101008083540402835291602001916107e1565b820191906000526020600020905b8154815290600101906020018083116107c457829003601f168201915b505050505081526020016003820180546107fa90612645565b80601f016020809104026020016040519081016040528092919081815260200182805461082690612645565b80156108735780601f1061084857610100808354040283529160200191610873565b820191906000526020600020905b81548152906001019060200180831161085657829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156108f65760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016108a1565b505050915250909392505050565b61090c6119ba565b6001610919600584611a3d565b14610958576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b6109688260025b60059190611c37565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916109b090612645565b80601f01602080910402602001604051908101604052809291908181526020018280546109dc90612645565b8015610a295780601f106109fe57610100808354040283529160200191610a29565b820191906000526020600020905b815481529060010190602001808311610a0c57829003601f168201915b50505050508152602001600382018054610a4290612645565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6e90612645565b8015610abb5780601f10610a9057610100808354040283529160200191610abb565b820191906000526020600020905b815481529060010190602001808311610a9e57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610b3e5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610ae9565b5050505081525050905060005b816080015151811015610bcd57610bc58383608001518381518110610b7257610b72612698565b60200260200101516020015184608001518481518110610b9457610b94612698565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16611baa9092919063ffffffff16565b600101610b4b565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161094f565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610d236119ba565b60005b81811015610ec65760036000848484818110610d4457610d44612698565b9050602002810190610d5691906126c7565b610d6490602081019061226b565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610d9b57610d9b612698565b9050602002810190610dad91906126c7565b610dbb906020810190612705565b604051610dc9929190612635565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055828282818110610e1057610e10612698565b9050602002810190610e2291906126c7565b610e30906020810190612705565b604051610e3e929190612635565b6040518091039020838383818110610e5857610e58612698565b9050602002810190610e6a91906126c7565b610e7890602081019061226b565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051610eb6911515815260200190565b60405180910390a3600101610d26565b5060005b8381101561107557600160036000878785818110610eea57610eea612698565b9050602002810190610efc91906126c7565b610f0a90602081019061226b565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610f4157610f41612698565b9050602002810190610f5391906126c7565b610f61906020810190612705565b604051610f6f929190612635565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055848482818110610fbf57610fbf612698565b9050602002810190610fd191906126c7565b610fdf906020810190612705565b604051610fed929190612635565b604051809103902085858381811061100757611007612698565b905060200281019061101991906126c7565b61102790602081019061226b565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816001604051611065911515815260200190565b60405180910390a3600101610eca565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146110cf576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240161094f565b6110df604082016020830161226b565b67ffffffffffffffff811660009081526003602052604090208054819061110590612645565b905060000361114c576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015260240161094f565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611188908690600401612877565b600060405180830381600087803b1580156111a257600080fd5b505af19250505080156111b3575060015b611253573d8080156111e1576040519150601f19603f3d011682016040523d82523d6000602084013e6111e6565b606091505b506111f38435600161095f565b508335600090815260046020526040902084906112108282612c78565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f90611245908490612d78565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b61128d6119ba565b60005b81811015611280578282828181106112aa576112aa612698565b90506020028101906112bc9190612d8b565b6112cd906040810190602001612dcd565b6113a057600360008484848181106112e7576112e7612698565b90506020028101906112f99190612d8b565b61130790602081019061226b565b67ffffffffffffffff1681526020810191909152604001600090812061132c91612182565b7f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991683838381811061135f5761135f612698565b90506020028101906113719190612d8b565b61137f90602081019061226b565b60405167ffffffffffffffff909116815260200160405180910390a16115f8565b8282828181106113b2576113b2612698565b90506020028101906113c49190612d8b565b6113d2906040810190612705565b905060000361140d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600085858581811061142557611425612698565b90506020028101906114379190612d8b565b61144590602081019061226b565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020905083838381811061147b5761147b612698565b905060200281019061148d9190612d8b565b61149b906040810190612705565b82916114a8919083612a04565b508383838181106114bb576114bb612698565b90506020028101906114cd9190612d8b565b6114db906060810190612705565b159050611526578383838181106114f4576114f4612698565b90506020028101906115069190612d8b565b611514906060810190612705565b6001830191611524919083612a04565b505b7f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721284848481811061155957611559612698565b905060200281019061156b9190612d8b565b61157990602081019061226b565b85858581811061158b5761158b612698565b905060200281019061159d9190612d8b565b6115ab906040810190612705565b8787878181106115bd576115bd612698565b90506020028101906115cf9190612d8b565b6115dd906060810190612705565b6040516115ee959493929190612dea565b60405180910390a1505b600101611290565b333014611639576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611649604082016020830161226b565b6116566040830183612705565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506116ad92509050612645565b159050806117035750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516116ee9190612e2d565b9081526040519081900360200190205460ff16155b1561128057806040517f5075bb3800000000000000000000000000000000000000000000000000000000815260040161094f9190612d78565b6001611749600583611a3d565b14611783576040517fb6e782600000000000000000000000000000000000000000000000000000000081526004810182905260240161094f565b61178e81600061095f565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916117d690612645565b80601f016020809104026020016040519081016040528092919081815260200182805461180290612645565b801561184f5780601f106118245761010080835404028352916020019161184f565b820191906000526020600020905b81548152906001019060200180831161183257829003601f168201915b5050505050815260200160038201805461186890612645565b80601f016020809104026020016040519081016040528092919081815260200182805461189490612645565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156119645760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff16825260019081015482840152908352909201910161190f565b5050505081525050905061197781611c4c565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b6119ae6119ba565b6119b781611c54565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161094f565b565b6000611a498383611d49565b9392505050565b80471015611aba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161094f565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611b14576040519150601f19603f3d011682016040523d82523d6000602084013e611b19565b606091505b5050905080611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161094f565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611280908490611dd3565b6000611c44848484611edf565b949350505050565b6119b76119ba565b3373ffffffffffffffffffffffffffffffffffffffff821603611cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161094f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260028301602052604081205480151580611d6d5750611d6d8484611efc565b611a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640161094f565b6000611e35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f089092919063ffffffff16565b8051909150156112805780806020019051810190611e539190612e3f565b611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161094f565b60008281526002840160205260408120829055611c448484611f17565b6000611a498383611f23565b6060611c448484600085611f3b565b6000611a498383612054565b60008181526001830160205260408120541515611a49565b606082471015611fcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161094f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611ff69190612e2d565b60006040518083038185875af1925050503d8060008114612033576040519150601f19603f3d011682016040523d82523d6000602084013e612038565b606091505b5091509150612049878383876120a3565b979650505050505050565b600081815260018301602052604081205461209b575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105fa565b5060006105fa565b606083156121395782516000036121325773ffffffffffffffffffffffffffffffffffffffff85163b612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161094f565b5081611c44565b611c44838381511561214e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f9190612d78565b50805461218e90612645565b6000825580601f1061219e575050565b601f0160209004906000526020600020908101906119b791905b808211156121cc57600081556001016121b8565b5090565b67ffffffffffffffff811681146119b757600080fd5b6000806000604084860312156121fb57600080fd5b8335612206816121d0565b9250602084013567ffffffffffffffff8082111561222357600080fd5b818601915086601f83011261223757600080fd5b81358181111561224657600080fd5b87602082850101111561225857600080fd5b6020830194508093505050509250925092565b60006020828403121561227d57600080fd5b8135611a49816121d0565b60005b838110156122a357818101518382015260200161228b565b50506000910152565b600081518084526122c4816020860160208601612288565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600061230960408301856122ac565b828103602084015261231b81856122ac565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119b757600080fd5b60006020828403121561235857600080fd5b8135611a4981612324565b60006020828403121561237557600080fd5b5035919050565b6000806040838503121561238f57600080fd5b823561239a81612324565b946020939093013593505050565b6000806000606084860312156123bd57600080fd5b83356123c881612324565b925060208401356123d881612324565b929592945050506040919091013590565b6000602080835283518184015280840151604067ffffffffffffffff821660408601526040860151915060a0606086015261242760c08601836122ac565b915060608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08087850301608088015261246384836122ac565b608089015188820390920160a089015281518082529186019450600092508501905b808310156124c4578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001929092019190830190612485565b50979650505050505050565b600080604083850312156124e357600080fd5b8235915060208301356124f581612324565b809150509250929050565b60008083601f84011261251257600080fd5b50813567ffffffffffffffff81111561252a57600080fd5b6020830191508360208260051b850101111561254557600080fd5b9250929050565b6000806000806040858703121561256257600080fd5b843567ffffffffffffffff8082111561257a57600080fd5b61258688838901612500565b9096509450602087013591508082111561259f57600080fd5b506125ac87828801612500565b95989497509550505050565b6000602082840312156125ca57600080fd5b813567ffffffffffffffff8111156125e157600080fd5b820160a08185031215611a4957600080fd5b6000806020838503121561260657600080fd5b823567ffffffffffffffff81111561261d57600080fd5b61262985828601612500565b90969095509350505050565b8183823760009101908152919050565b600181811c9082168061265957607f821691505b602082108103612692577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126126fb57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261273a57600080fd5b83018035915067ffffffffffffffff82111561275557600080fd5b60200191503681900382131561254557600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261279f57600080fd5b830160208101925035905067ffffffffffffffff8111156127bf57600080fd5b80360382131561254557600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b8581101561286c57813561283a81612324565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612827565b509495945050505050565b602081528135602082015260006020830135612892816121d0565b67ffffffffffffffff80821660408501526128b0604086018661276a565b925060a060608601526128c760c0860184836127ce565b9250506128d7606086018661276a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08087860301608088015261290d8583856127ce565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261294657600080fd5b6020928801928301923591508382111561295f57600080fd5b8160061b360383131561297157600080fd5b8685030160a0870152612049848284612817565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115611280576000816000526020600020601f850160051c810160208610156129dd5750805b601f850160051c820191505b818110156129fc578281556001016129e9565b505050505050565b67ffffffffffffffff831115612a1c57612a1c612985565b612a3083612a2a8354612645565b836129b4565b6000601f841160018114612a825760008515612a4c5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611075565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612ad15786850135825560209485019460019092019101612ab1565b5086821015612b0c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b600181901b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168214612b7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919050565b8135612b8b81612324565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b68010000000000000000831115612bf157612bf1612985565b805483825580841015612c4357612c0781612b1e565b612c1085612b1e565b6000848152602081209283019291909101905b82821015612c3f57808255806001830155600282019150612c23565b5050505b5060008181526020812083915b858110156129fc57612c628383612b80565b6040929092019160029190910190600101612c50565b81358155600181016020830135612c8e816121d0565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000845416178355612cce6040860186612705565b93509150612ce0838360028701612a04565b612ced6060860186612705565b93509150612cff838360038701612a04565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018312612d3657600080fd5b918401918235915080821115612d4b57600080fd5b506020820191508060061b3603821315612d6457600080fd5b612d72818360048601612bd8565b50505050565b602081526000611a4960208301846122ac565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126126fb57600080fd5b80151581146119b757600080fd5b600060208284031215612ddf57600080fd5b8135611a4981612dbf565b67ffffffffffffffff86168152606060208201526000612e0e6060830186886127ce565b8281036040840152612e218185876127ce565b98975050505050505050565b600082516126fb818460208701612288565b600060208284031215612e5157600080fd5b8151611a4981612dbf56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b506040516200304e3803806200304e8339810160408190526200003491620001bc565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000111565b5050506001600160a01b038116620000ea576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905550620001ee565b336001600160a01b038216036200016b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001cf57600080fd5b81516001600160a01b0381168114620001e757600080fd5b9392505050565b612e5080620001fe6000396000f3fe6080604052600436106101125760003560e01c806379ba5097116100a55780639fe74e2611610074578063cf6730f811610059578063cf6730f81461034a578063e4ca87541461036a578063f2fde38b1461038a57600080fd5b80639fe74e26146102ff578063b0f479a11461031f57600080fd5b806379ba50971461025e5780638462a2b91461027357806385572ffb146102935780638da5cb5b146102b357600080fd5b8063536c6bfa116100e1578063536c6bfa146101d15780635e35359e146101f15780636939cd97146102115780636d62d6331461023e57600080fd5b80630e958d6b1461011e57806335f170ef146101535780634e12498b146101815780635075a9d4146101a357600080fd5b3661011957005b600080fd5b34801561012a57600080fd5b5061013e6101393660046121fc565b6103aa565b60405190151581526020015b60405180910390f35b34801561015f57600080fd5b5061017361016e366004612281565b6103f5565b60405161014a92919061230c565b34801561018d57600080fd5b506101a161019c36600461235c565b610521565b005b3480156101af57600080fd5b506101c36101be366004612379565b6105ed565b60405190815260200161014a565b3480156101dd57600080fd5b506101a16101ec366004612392565b610600565b3480156101fd57600080fd5b506101a161020c3660046123be565b610664565b34801561021d57600080fd5b5061023161022c366004612379565b6106f9565b60405161014a91906123ff565b34801561024a57600080fd5b506101a16102593660046124e6565b610904565b34801561026a57600080fd5b506101a1610c1e565b34801561027f57600080fd5b506101a161028e366004612562565b610d1b565b34801561029f57600080fd5b506101a16102ae3660046125ce565b61107c565b3480156102bf57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014a565b34801561030b57600080fd5b506101a161031a366004612609565b611285565b34801561032b57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102da565b34801561035657600080fd5b506101a16103653660046125ce565b611616565b34801561037657600080fd5b506101a1610385366004612379565b611752565b34801561039657600080fd5b506101a16103a536600461235c565b6119bc565b67ffffffffffffffff831660009081526003602052604080822090516002909101906103d9908590859061264b565b9081526040519081900360200190205460ff1690509392505050565b6003602052600090815260409020805481906104109061265b565b80601f016020809104026020016040519081016040528092919081815260200182805461043c9061265b565b80156104895780601f1061045e57610100808354040283529160200191610489565b820191906000526020600020905b81548152906001019060200180831161046c57829003601f168201915b50505050509080600101805461049e9061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca9061265b565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905082565b6105296119d0565b73ffffffffffffffffffffffffffffffffffffffff8116610576576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b60006105fa600583611a53565b92915050565b6106086119d0565b6106128282611a66565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b61066c6119d0565b61068d73ffffffffffffffffffffffffffffffffffffffff84168383611bc0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516106ec91815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff16918301919091526002810180549394929391928401916107689061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546107949061265b565b80156107e15780601f106107b6576101008083540402835291602001916107e1565b820191906000526020600020905b8154815290600101906020018083116107c457829003601f168201915b505050505081526020016003820180546107fa9061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546108269061265b565b80156108735780601f1061084857610100808354040283529160200191610873565b820191906000526020600020905b81548152906001019060200180831161085657829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156108f65760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016108a1565b505050915250909392505050565b61090c6119d0565b6001610919600584611a53565b14610958576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b6109688260025b60059190611c4d565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916109b09061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546109dc9061265b565b8015610a295780601f106109fe57610100808354040283529160200191610a29565b820191906000526020600020905b815481529060010190602001808311610a0c57829003601f168201915b50505050508152602001600382018054610a429061265b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6e9061265b565b8015610abb5780601f10610a9057610100808354040283529160200191610abb565b820191906000526020600020905b815481529060010190602001808311610a9e57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610b3e5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610ae9565b5050505081525050905060005b816080015151811015610bcd57610bc58383608001518381518110610b7257610b726126ae565b60200260200101516020015184608001518481518110610b9457610b946126ae565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16611bc09092919063ffffffff16565b600101610b4b565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161094f565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610d236119d0565b60005b81811015610ec65760036000848484818110610d4457610d446126ae565b9050602002810190610d5691906126dd565b610d64906020810190612281565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610d9b57610d9b6126ae565b9050602002810190610dad91906126dd565b610dbb90602081019061271b565b604051610dc992919061264b565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055828282818110610e1057610e106126ae565b9050602002810190610e2291906126dd565b610e3090602081019061271b565b604051610e3e92919061264b565b6040518091039020838383818110610e5857610e586126ae565b9050602002810190610e6a91906126dd565b610e78906020810190612281565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051610eb6911515815260200190565b60405180910390a3600101610d26565b5060005b8381101561107557600160036000878785818110610eea57610eea6126ae565b9050602002810190610efc91906126dd565b610f0a906020810190612281565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610f4157610f416126ae565b9050602002810190610f5391906126dd565b610f6190602081019061271b565b604051610f6f92919061264b565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055848482818110610fbf57610fbf6126ae565b9050602002810190610fd191906126dd565b610fdf90602081019061271b565b604051610fed92919061264b565b6040518091039020858583818110611007576110076126ae565b905060200281019061101991906126dd565b611027906020810190612281565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816001604051611065911515815260200190565b60405180910390a3600101610eca565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146110cf576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240161094f565b6110df6040820160208301612281565b67ffffffffffffffff81166000908152600360205260409020805481906111059061265b565b905060000361114c576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015260240161094f565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f89061118890869060040161288d565b600060405180830381600087803b1580156111a257600080fd5b505af19250505080156111b3575060015b611253573d8080156111e1576040519150601f19603f3d011682016040523d82523d6000602084013e6111e6565b606091505b506111f38435600161095f565b508335600090815260046020526040902084906112108282612c8e565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f90611245908490612d8e565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b61128d6119d0565b60005b81811015611280578282828181106112aa576112aa6126ae565b90506020028101906112bc9190612da1565b6112cd906040810190602001612de3565b61139957600360008484848181106112e7576112e76126ae565b90506020028101906112f99190612da1565b611307906020810190612281565b67ffffffffffffffff1681526020810191909152604001600090812061132c91612198565b82828281811061133e5761133e6126ae565b90506020028101906113509190612da1565b61135e906020810190612281565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a261160e565b8282828181106113ab576113ab6126ae565b90506020028101906113bd9190612da1565b6113cb90604081019061271b565b9050600003611406576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600085858581811061141e5761141e6126ae565b90506020028101906114309190612da1565b61143e906020810190612281565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611474576114746126ae565b90506020028101906114869190612da1565b61149490604081019061271b565b82916114a1919083612a1a565b508383838181106114b4576114b46126ae565b90506020028101906114c69190612da1565b6114d490606081019061271b565b15905061151f578383838181106114ed576114ed6126ae565b90506020028101906114ff9190612da1565b61150d90606081019061271b565b600183019161151d919083612a1a565b505b838383818110611531576115316126ae565b90506020028101906115439190612da1565b61155190604081019061271b565b60405161155f92919061264b565b6040518091039020848484818110611579576115796126ae565b905060200281019061158b9190612da1565b611599906020810190612281565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a872128686868181106115d6576115d66126ae565b90506020028101906115e89190612da1565b6115f690606081019061271b565b604051611604929190612e00565b60405180910390a3505b600101611290565b33301461164f576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165f6040820160208301612281565b61166c604083018361271b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506116c39250905061265b565b159050806117195750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516117049190612e14565b9081526040519081900360200190205460ff16155b1561128057806040517f5075bb3800000000000000000000000000000000000000000000000000000000815260040161094f9190612d8e565b600161175f600583611a53565b14611799576040517fb6e782600000000000000000000000000000000000000000000000000000000081526004810182905260240161094f565b6117a481600061095f565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916117ec9061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546118189061265b565b80156118655780601f1061183a57610100808354040283529160200191611865565b820191906000526020600020905b81548152906001019060200180831161184857829003601f168201915b5050505050815260200160038201805461187e9061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546118aa9061265b565b80156118f75780601f106118cc576101008083540402835291602001916118f7565b820191906000526020600020905b8154815290600101906020018083116118da57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561197a5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611925565b5050505081525050905061198d81611c62565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b6119c46119d0565b6119cd81611c6a565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161094f565b565b6000611a5f8383611d5f565b9392505050565b80471015611ad0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161094f565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611b2a576040519150601f19603f3d011682016040523d82523d6000602084013e611b2f565b606091505b5050905080611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161094f565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611280908490611de9565b6000611c5a848484611ef5565b949350505050565b6119cd6119d0565b3373ffffffffffffffffffffffffffffffffffffffff821603611ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161094f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260028301602052604081205480151580611d835750611d838484611f12565b611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640161094f565b6000611e4b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f1e9092919063ffffffff16565b8051909150156112805780806020019051810190611e699190612e26565b611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161094f565b60008281526002840160205260408120829055611c5a8484611f2d565b6000611a5f8383611f39565b6060611c5a8484600085611f51565b6000611a5f838361206a565b60008181526001830160205260408120541515611a5f565b606082471015611fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161094f565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161200c9190612e14565b60006040518083038185875af1925050503d8060008114612049576040519150601f19603f3d011682016040523d82523d6000602084013e61204e565b606091505b509150915061205f878383876120b9565b979650505050505050565b60008181526001830160205260408120546120b1575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105fa565b5060006105fa565b6060831561214f5782516000036121485773ffffffffffffffffffffffffffffffffffffffff85163b612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161094f565b5081611c5a565b611c5a83838151156121645781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f9190612d8e565b5080546121a49061265b565b6000825580601f106121b4575050565b601f0160209004906000526020600020908101906119cd91905b808211156121e257600081556001016121ce565b5090565b67ffffffffffffffff811681146119cd57600080fd5b60008060006040848603121561221157600080fd5b833561221c816121e6565b9250602084013567ffffffffffffffff8082111561223957600080fd5b818601915086601f83011261224d57600080fd5b81358181111561225c57600080fd5b87602082850101111561226e57600080fd5b6020830194508093505050509250925092565b60006020828403121561229357600080fd5b8135611a5f816121e6565b60005b838110156122b95781810151838201526020016122a1565b50506000910152565b600081518084526122da81602086016020860161229e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600061231f60408301856122c2565b828103602084015261233181856122c2565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119cd57600080fd5b60006020828403121561236e57600080fd5b8135611a5f8161233a565b60006020828403121561238b57600080fd5b5035919050565b600080604083850312156123a557600080fd5b82356123b08161233a565b946020939093013593505050565b6000806000606084860312156123d357600080fd5b83356123de8161233a565b925060208401356123ee8161233a565b929592945050506040919091013590565b6000602080835283518184015280840151604067ffffffffffffffff821660408601526040860151915060a0606086015261243d60c08601836122c2565b915060608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08087850301608088015261247984836122c2565b608089015188820390920160a089015281518082529186019450600092508501905b808310156124da578451805173ffffffffffffffffffffffffffffffffffffffff1683528601518683015293850193600192909201919083019061249b565b50979650505050505050565b600080604083850312156124f957600080fd5b82359150602083013561250b8161233a565b809150509250929050565b60008083601f84011261252857600080fd5b50813567ffffffffffffffff81111561254057600080fd5b6020830191508360208260051b850101111561255b57600080fd5b9250929050565b6000806000806040858703121561257857600080fd5b843567ffffffffffffffff8082111561259057600080fd5b61259c88838901612516565b909650945060208701359150808211156125b557600080fd5b506125c287828801612516565b95989497509550505050565b6000602082840312156125e057600080fd5b813567ffffffffffffffff8111156125f757600080fd5b820160a08185031215611a5f57600080fd5b6000806020838503121561261c57600080fd5b823567ffffffffffffffff81111561263357600080fd5b61263f85828601612516565b90969095509350505050565b8183823760009101908152919050565b600181811c9082168061266f57607f821691505b6020821081036126a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261271157600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261275057600080fd5b83018035915067ffffffffffffffff82111561276b57600080fd5b60200191503681900382131561255b57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127b557600080fd5b830160208101925035905067ffffffffffffffff8111156127d557600080fd5b80360382131561255b57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156128825781356128508161233a565b73ffffffffffffffffffffffffffffffffffffffff16875281830135838801526040968701969091019060010161283d565b509495945050505050565b6020815281356020820152600060208301356128a8816121e6565b67ffffffffffffffff80821660408501526128c66040860186612780565b925060a060608601526128dd60c0860184836127e4565b9250506128ed6060860186612780565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526129238583856127e4565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261295c57600080fd5b6020928801928301923591508382111561297557600080fd5b8160061b360383131561298757600080fd5b8685030160a087015261205f84828461282d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115611280576000816000526020600020601f850160051c810160208610156129f35750805b601f850160051c820191505b81811015612a12578281556001016129ff565b505050505050565b67ffffffffffffffff831115612a3257612a3261299b565b612a4683612a40835461265b565b836129ca565b6000601f841160018114612a985760008515612a625750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611075565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612ae75786850135825560209485019460019092019101612ac7565b5086821015612b22577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b600181901b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168214612b91577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919050565b8135612ba18161233a565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b68010000000000000000831115612c0757612c0761299b565b805483825580841015612c5957612c1d81612b34565b612c2685612b34565b6000848152602081209283019291909101905b82821015612c5557808255806001830155600282019150612c39565b5050505b5060008181526020812083915b85811015612a1257612c788383612b96565b6040929092019160029190910190600101612c66565b81358155600181016020830135612ca4816121e6565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000845416178355612ce4604086018661271b565b93509150612cf6838360028701612a1a565b612d03606086018661271b565b93509150612d15838360038701612a1a565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018312612d4c57600080fd5b918401918235915080821115612d6157600080fd5b506020820191508060061b3603821315612d7a57600080fd5b612d88818360048601612bee565b50505050565b602081526000611a5f60208301846122c2565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261271157600080fd5b80151581146119cd57600080fd5b600060208284031215612df557600080fd5b8135611a5f81612dd5565b602081526000611c5a6020830184866127e4565b6000825161271181846020870161229e565b600060208284031215612e3857600080fd5b8151611a5f81612dd556fea164736f6c6343000818000a", } var CCIPReceiverABI = CCIPReceiverMetaData.ABI @@ -815,23 +815,41 @@ func (it *CCIPReceiverChainAddedIterator) Close() error { type CCIPReceiverChainAdded struct { RemoteChainSelector uint64 - Recipient []byte + Recipient common.Hash ExtraArgsBytes []byte Raw types.Log } -func (_CCIPReceiver *CCIPReceiverFilterer) FilterChainAdded(opts *bind.FilterOpts) (*CCIPReceiverChainAddedIterator, error) { +func (_CCIPReceiver *CCIPReceiverFilterer) FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*CCIPReceiverChainAddedIterator, error) { - logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "ChainAdded") + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } return &CCIPReceiverChainAddedIterator{contract: _CCIPReceiver.contract, event: "ChainAdded", logs: logs, sub: sub}, nil } -func (_CCIPReceiver *CCIPReceiverFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainAdded) (event.Subscription, error) { +func (_CCIPReceiver *CCIPReceiverFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } - logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "ChainAdded") + logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -937,18 +955,28 @@ type CCIPReceiverChainRemoved struct { Raw types.Log } -func (_CCIPReceiver *CCIPReceiverFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*CCIPReceiverChainRemovedIterator, error) { +func (_CCIPReceiver *CCIPReceiverFilterer) FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*CCIPReceiverChainRemovedIterator, error) { - logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "ChainRemoved") + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } + + logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } return &CCIPReceiverChainRemovedIterator{contract: _CCIPReceiver.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil } -func (_CCIPReceiver *CCIPReceiverFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainRemoved) (event.Subscription, error) { +func (_CCIPReceiver *CCIPReceiverFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainRemoved, removeChainSelector []uint64) (event.Subscription, error) { + + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } - logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "ChainRemoved") + logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } @@ -2042,15 +2070,15 @@ type CCIPReceiverInterface interface { ParseCCIPRouterModified(log types.Log) (*CCIPReceiverCCIPRouterModified, error) - FilterChainAdded(opts *bind.FilterOpts) (*CCIPReceiverChainAddedIterator, error) + FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*CCIPReceiverChainAddedIterator, error) - WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainAdded) (event.Subscription, error) + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) ParseChainAdded(log types.Log) (*CCIPReceiverChainAdded, error) - FilterChainRemoved(opts *bind.FilterOpts) (*CCIPReceiverChainRemovedIterator, error) + FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*CCIPReceiverChainRemovedIterator, error) - WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainRemoved) (event.Subscription, error) + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPReceiverChainRemoved, removeChainSelector []uint64) (event.Subscription, error) ParseChainRemoved(log types.Log) (*CCIPReceiverChainRemoved, error) diff --git a/core/gethwrappers/ccip/generated/ccipSender/ccipSender.go b/core/gethwrappers/ccip/generated/ccipSender/ccipSender.go index f6ca5ca628..1795a9bbbe 100644 --- a/core/gethwrappers/ccip/generated/ccipSender/ccipSender.go +++ b/core/gethwrappers/ccip/generated/ccipSender/ccipSender.go @@ -48,8 +48,8 @@ type ClientEVMTokenAmount struct { } var CCIPSenderMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InsufficientNativeFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162002759380380620027598339810160408190526200003491620001bc565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000111565b5050506001600160a01b038116620000ea576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905550620001ee565b336001600160a01b038216036200016b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001cf57600080fd5b81516001600160a01b0381168114620001e757600080fd5b9392505050565b61255b80620001fe6000396000f3fe6080604052600436106100cb5760003560e01c80638462a2b911610074578063b0f479a11161004e578063b0f479a11461023d578063effde24014610268578063f2fde38b1461028957600080fd5b80638462a2b9146101b15780638da5cb5b146101d15780639fe74e261461021d57600080fd5b8063536c6bfa116100a5578063536c6bfa1461015c5780635e35359e1461017c57806379ba50971461019c57600080fd5b80630e958d6b146100d757806335f170ef1461010c5780634e12498b1461013a57600080fd5b366100d257005b600080fd5b3480156100e357600080fd5b506100f76100f2366004611c11565b6102a9565b60405190151581526020015b60405180910390f35b34801561011857600080fd5b5061012c610127366004611c64565b6102f4565b604051610103929190611cf4565b34801561014657600080fd5b5061015a610155366004611d4f565b610420565b005b34801561016857600080fd5b5061015a610177366004611d6c565b6104ec565b34801561018857600080fd5b5061015a610197366004611d98565b610550565b3480156101a857600080fd5b5061015a6105e5565b3480156101bd57600080fd5b5061015a6101cc366004611e1e565b6106e7565b3480156101dd57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610103565b34801561022957600080fd5b5061015a610238366004611e8a565b610a48565b34801561024957600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166101f8565b61027b610276366004611ecc565b610dc8565b604051908152602001610103565b34801561029557600080fd5b5061015a6102a4366004611d4f565b611326565b67ffffffffffffffff831660009081526003602052604080822090516002909101906102d89085908590611f8d565b9081526040519081900360200190205460ff1690509392505050565b60036020526000908152604090208054819061030f90611f9d565b80601f016020809104026020016040519081016040528092919081815260200182805461033b90611f9d565b80156103885780601f1061035d57610100808354040283529160200191610388565b820191906000526020600020905b81548152906001019060200180831161036b57829003601f168201915b50505050509080600101805461039d90611f9d565b80601f01602080910402602001604051908101604052809291908181526020018280546103c990611f9d565b80156104165780601f106103eb57610100808354040283529160200191610416565b820191906000526020600020905b8154815290600101906020018083116103f957829003601f168201915b5050505050905082565b61042861133a565b73ffffffffffffffffffffffffffffffffffffffff8116610475576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6104f461133a565b6104fe82826113bd565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b61055861133a565b61057973ffffffffffffffffffffffffffffffffffffffff84168383611517565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516105d891815260200190565b60405180910390a3505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6106ef61133a565b60005b81811015610892576003600084848481811061071057610710611ff0565b9050602002810190610722919061201f565b610730906020810190611c64565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061076757610767611ff0565b9050602002810190610779919061201f565b61078790602081019061205d565b604051610795929190611f8d565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106107dc576107dc611ff0565b90506020028101906107ee919061201f565b6107fc90602081019061205d565b60405161080a929190611f8d565b604051809103902083838381811061082457610824611ff0565b9050602002810190610836919061201f565b610844906020810190611c64565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051610882911515815260200190565b60405180910390a36001016106f2565b5060005b83811015610a41576001600360008787858181106108b6576108b6611ff0565b90506020028101906108c8919061201f565b6108d6906020810190611c64565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061090d5761090d611ff0565b905060200281019061091f919061201f565b61092d90602081019061205d565b60405161093b929190611f8d565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061098b5761098b611ff0565b905060200281019061099d919061201f565b6109ab90602081019061205d565b6040516109b9929190611f8d565b60405180910390208585838181106109d3576109d3611ff0565b90506020028101906109e5919061201f565b6109f3906020810190611c64565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816001604051610a31911515815260200190565b60405180910390a3600101610896565b5050505050565b610a5061133a565b60005b81811015610dc357828282818110610a6d57610a6d611ff0565b9050602002810190610a7f91906120c2565b610a90906040810190602001612104565b610b635760036000848484818110610aaa57610aaa611ff0565b9050602002810190610abc91906120c2565b610aca906020810190611c64565b67ffffffffffffffff16815260208101919091526040016000908120610aef91611b5d565b7f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916838383818110610b2257610b22611ff0565b9050602002810190610b3491906120c2565b610b42906020810190611c64565b60405167ffffffffffffffff909116815260200160405180910390a1610dbb565b828282818110610b7557610b75611ff0565b9050602002810190610b8791906120c2565b610b9590604081019061205d565b9050600003610bd0576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858585818110610be857610be8611ff0565b9050602002810190610bfa91906120c2565b610c08906020810190611c64565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110610c3e57610c3e611ff0565b9050602002810190610c5091906120c2565b610c5e90604081019061205d565b8291610c6b9190836121a0565b50838383818110610c7e57610c7e611ff0565b9050602002810190610c9091906120c2565b610c9e90606081019061205d565b159050610ce957838383818110610cb757610cb7611ff0565b9050602002810190610cc991906120c2565b610cd790606081019061205d565b6001830191610ce79190836121a0565b505b7f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212848484818110610d1c57610d1c611ff0565b9050602002810190610d2e91906120c2565b610d3c906020810190611c64565b858585818110610d4e57610d4e611ff0565b9050602002810190610d6091906120c2565b610d6e90604081019061205d565b878787818110610d8057610d80611ff0565b9050602002810190610d9291906120c2565b610da090606081019061205d565b604051610db1959493929190612303565b60405180910390a1505b600101610a53565b505050565b67ffffffffffffffff8616600090815260036020526040812080548891908190610df190611f9d565b9050600003610e38576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610662565b6040805160a08101825267ffffffffffffffff8b16600090815260036020529182208054829190610e6890611f9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9490611f9d565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250506040805160208e8102820181019092528d815293810193928e92508d9182919085015b82821015610f7157610f6260408302860136819003810190612346565b81526020019060010190610f45565b505050505081526020018673ffffffffffffffffffffffffffffffffffffffff168152602001600360008d67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054610fcc90611f9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff890611f9d565b80156110455780601f1061101a57610100808354040283529160200191611045565b820191906000526020600020905b81548152906001019060200180831161102857829003601f168201915b5050505050815250905060005b88811015611147576110c133308c8c8581811061107157611071611ff0565b905060400201602001358d8d8681811061108d5761108d611ff0565b6110a39260206040909202019081019150611d4f565b73ffffffffffffffffffffffffffffffffffffffff169291906115eb565b60025461113f9073ffffffffffffffffffffffffffffffffffffffff168b8b848181106110f0576110f0611ff0565b905060400201602001358c8c8581811061110c5761110c611ff0565b6111229260206040909202019081019150611d4f565b73ffffffffffffffffffffffffffffffffffffffff16919061164f565b600101611052565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded906111a1908e90869060040161239e565b602060405180830381865afa1580156111be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e291906124b3565b905073ffffffffffffffffffffffffffffffffffffffff8616156112495761122273ffffffffffffffffffffffffffffffffffffffff87163330846115eb565b6002546112499073ffffffffffffffffffffffffffffffffffffffff88811691168361164f565b60025473ffffffffffffffffffffffffffffffffffffffff908116906396f4e9f99088161561127957600061127b565b825b8d856040518463ffffffff1660e01b815260040161129a92919061239e565b60206040518083038185885af11580156112b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112dd91906124b3565b94507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a8560405161131091815260200190565b60405180910390a1505050509695505050505050565b61132e61133a565b6113378161174d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610662565b565b80471015611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610662565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611481576040519150601f19603f3d011682016040523d82523d6000602084013e611486565b606091505b5050905080610dc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610662565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610dc39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611842565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116499085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611569565b50505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea91906124b3565b6116f491906124cc565b60405173ffffffffffffffffffffffffffffffffffffffff85166024820152604481018290529091506116499085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611569565b3373ffffffffffffffffffffffffffffffffffffffff8216036117cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610662565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006118a4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661194e9092919063ffffffff16565b805190915015610dc357808060200190518101906118c2919061250c565b610dc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610662565b606061195d8484600085611965565b949350505050565b6060824710156119f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610662565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a209190612529565b60006040518083038185875af1925050503d8060008114611a5d576040519150601f19603f3d011682016040523d82523d6000602084013e611a62565b606091505b5091509150611a7387838387611a7e565b979650505050505050565b60608315611b14578251600003611b0d5773ffffffffffffffffffffffffffffffffffffffff85163b611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610662565b508161195d565b61195d8383815115611b295781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610662919061253b565b508054611b6990611f9d565b6000825580601f10611b79575050565b601f01602090049060005260206000209081019061133791905b80821115611ba75760008155600101611b93565b5090565b803567ffffffffffffffff81168114611bc357600080fd5b919050565b60008083601f840112611bda57600080fd5b50813567ffffffffffffffff811115611bf257600080fd5b602083019150836020828501011115611c0a57600080fd5b9250929050565b600080600060408486031215611c2657600080fd5b611c2f84611bab565b9250602084013567ffffffffffffffff811115611c4b57600080fd5b611c5786828701611bc8565b9497909650939450505050565b600060208284031215611c7657600080fd5b611c7f82611bab565b9392505050565b60005b83811015611ca1578181015183820152602001611c89565b50506000910152565b60008151808452611cc2816020860160208601611c86565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000611d076040830185611caa565b8281036020840152611d198185611caa565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461133757600080fd5b8035611bc381611d22565b600060208284031215611d6157600080fd5b8135611c7f81611d22565b60008060408385031215611d7f57600080fd5b8235611d8a81611d22565b946020939093013593505050565b600080600060608486031215611dad57600080fd5b8335611db881611d22565b92506020840135611dc881611d22565b929592945050506040919091013590565b60008083601f840112611deb57600080fd5b50813567ffffffffffffffff811115611e0357600080fd5b6020830191508360208260051b8501011115611c0a57600080fd5b60008060008060408587031215611e3457600080fd5b843567ffffffffffffffff80821115611e4c57600080fd5b611e5888838901611dd9565b90965094506020870135915080821115611e7157600080fd5b50611e7e87828801611dd9565b95989497509550505050565b60008060208385031215611e9d57600080fd5b823567ffffffffffffffff811115611eb457600080fd5b611ec085828601611dd9565b90969095509350505050565b60008060008060008060808789031215611ee557600080fd5b611eee87611bab565b9550602087013567ffffffffffffffff80821115611f0b57600080fd5b818901915089601f830112611f1f57600080fd5b813581811115611f2e57600080fd5b8a60208260061b8501011115611f4357600080fd5b602083019750809650506040890135915080821115611f6157600080fd5b50611f6e89828a01611bc8565b9094509250611f81905060608801611d44565b90509295509295509295565b8183823760009101908152919050565b600181811c90821680611fb157607f821691505b602082108103611fea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261205357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261209257600080fd5b83018035915067ffffffffffffffff8211156120ad57600080fd5b602001915036819003821315611c0a57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261205357600080fd5b801515811461133757600080fd5b60006020828403121561211657600080fd5b8135611c7f816120f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610dc3576000816000526020600020601f850160051c810160208610156121795750805b601f850160051c820191505b8181101561219857828155600101612185565b505050505050565b67ffffffffffffffff8311156121b8576121b8612121565b6121cc836121c68354611f9d565b83612150565b6000601f84116001811461221e57600085156121e85750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610a41565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561226d578685013582556020948501946001909201910161224d565b50868210156122a8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b67ffffffffffffffff861681526060602082015260006123276060830186886122ba565b828103604084015261233a8185876122ba565b98975050505050505050565b60006040828403121561235857600080fd5b6040516040810181811067ffffffffffffffff8211171561237b5761237b612121565b604052823561238981611d22565b81526020928301359281019290925250919050565b6000604067ffffffffffffffff851683526020604081850152845160a060408601526123cd60e0860182611caa565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808784030160608801526124088383611caa565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015612469578451805173ffffffffffffffffffffffffffffffffffffffff1683528601518683015293850193600193909301929086019061242a565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506124a58187611caa565b9a9950505050505050505050565b6000602082840312156124c557600080fd5b5051919050565b80820180821115612506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561251e57600080fd5b8151611c7f816120f6565b60008251612053818460208701611c86565b602081526000611c7f6020830184611caa56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InsufficientNativeFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162002730380380620027308339810160408190526200003491620001bc565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000111565b5050506001600160a01b038116620000ea576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905550620001ee565b336001600160a01b038216036200016b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001cf57600080fd5b81516001600160a01b0381168114620001e757600080fd5b9392505050565b61253280620001fe6000396000f3fe6080604052600436106100cb5760003560e01c80638462a2b911610074578063b0f479a11161004e578063b0f479a11461023d578063effde24014610268578063f2fde38b1461028957600080fd5b80638462a2b9146101b15780638da5cb5b146101d15780639fe74e261461021d57600080fd5b8063536c6bfa116100a5578063536c6bfa1461015c5780635e35359e1461017c57806379ba50971461019c57600080fd5b80630e958d6b146100d757806335f170ef1461010c5780634e12498b1461013a57600080fd5b366100d257005b600080fd5b3480156100e357600080fd5b506100f76100f2366004611c27565b6102a9565b60405190151581526020015b60405180910390f35b34801561011857600080fd5b5061012c610127366004611c7a565b6102f4565b604051610103929190611d0a565b34801561014657600080fd5b5061015a610155366004611d65565b610420565b005b34801561016857600080fd5b5061015a610177366004611d82565b6104ec565b34801561018857600080fd5b5061015a610197366004611dae565b610550565b3480156101a857600080fd5b5061015a6105e5565b3480156101bd57600080fd5b5061015a6101cc366004611e34565b6106e7565b3480156101dd57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610103565b34801561022957600080fd5b5061015a610238366004611ea0565b610a48565b34801561024957600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166101f8565b61027b610276366004611ee2565b610dde565b604051908152602001610103565b34801561029557600080fd5b5061015a6102a4366004611d65565b61133c565b67ffffffffffffffff831660009081526003602052604080822090516002909101906102d89085908590611fa3565b9081526040519081900360200190205460ff1690509392505050565b60036020526000908152604090208054819061030f90611fb3565b80601f016020809104026020016040519081016040528092919081815260200182805461033b90611fb3565b80156103885780601f1061035d57610100808354040283529160200191610388565b820191906000526020600020905b81548152906001019060200180831161036b57829003601f168201915b50505050509080600101805461039d90611fb3565b80601f01602080910402602001604051908101604052809291908181526020018280546103c990611fb3565b80156104165780601f106103eb57610100808354040283529160200191610416565b820191906000526020600020905b8154815290600101906020018083116103f957829003601f168201915b5050505050905082565b610428611350565b73ffffffffffffffffffffffffffffffffffffffff8116610475576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6104f4611350565b6104fe82826113d3565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610558611350565b61057973ffffffffffffffffffffffffffffffffffffffff8416838361152d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516105d891815260200190565b60405180910390a3505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6106ef611350565b60005b81811015610892576003600084848481811061071057610710612006565b90506020028101906107229190612035565b610730906020810190611c7a565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061076757610767612006565b90506020028101906107799190612035565b610787906020810190612073565b604051610795929190611fa3565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106107dc576107dc612006565b90506020028101906107ee9190612035565b6107fc906020810190612073565b60405161080a929190611fa3565b604051809103902083838381811061082457610824612006565b90506020028101906108369190612035565b610844906020810190611c7a565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051610882911515815260200190565b60405180910390a36001016106f2565b5060005b83811015610a41576001600360008787858181106108b6576108b6612006565b90506020028101906108c89190612035565b6108d6906020810190611c7a565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061090d5761090d612006565b905060200281019061091f9190612035565b61092d906020810190612073565b60405161093b929190611fa3565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061098b5761098b612006565b905060200281019061099d9190612035565b6109ab906020810190612073565b6040516109b9929190611fa3565b60405180910390208585838181106109d3576109d3612006565b90506020028101906109e59190612035565b6109f3906020810190611c7a565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816001604051610a31911515815260200190565b60405180910390a3600101610896565b5050505050565b610a50611350565b60005b81811015610dd957828282818110610a6d57610a6d612006565b9050602002810190610a7f91906120d8565b610a9090604081019060200161211a565b610b5c5760036000848484818110610aaa57610aaa612006565b9050602002810190610abc91906120d8565b610aca906020810190611c7a565b67ffffffffffffffff16815260208101919091526040016000908120610aef91611b73565b828282818110610b0157610b01612006565b9050602002810190610b1391906120d8565b610b21906020810190611c7a565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a2610dd1565b828282818110610b6e57610b6e612006565b9050602002810190610b8091906120d8565b610b8e906040810190612073565b9050600003610bc9576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858585818110610be157610be1612006565b9050602002810190610bf391906120d8565b610c01906020810190611c7a565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110610c3757610c37612006565b9050602002810190610c4991906120d8565b610c57906040810190612073565b8291610c649190836121b6565b50838383818110610c7757610c77612006565b9050602002810190610c8991906120d8565b610c97906060810190612073565b159050610ce257838383818110610cb057610cb0612006565b9050602002810190610cc291906120d8565b610cd0906060810190612073565b6001830191610ce09190836121b6565b505b838383818110610cf457610cf4612006565b9050602002810190610d0691906120d8565b610d14906040810190612073565b604051610d22929190611fa3565b6040518091039020848484818110610d3c57610d3c612006565b9050602002810190610d4e91906120d8565b610d5c906020810190611c7a565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212868686818110610d9957610d99612006565b9050602002810190610dab91906120d8565b610db9906060810190612073565b604051610dc79291906122d0565b60405180910390a3505b600101610a53565b505050565b67ffffffffffffffff8616600090815260036020526040812080548891908190610e0790611fb3565b9050600003610e4e576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610662565b6040805160a08101825267ffffffffffffffff8b16600090815260036020529182208054829190610e7e90611fb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa90611fb3565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250506040805160208e8102820181019092528d815293810193928e92508d9182919085015b82821015610f8757610f786040830286013681900381019061231d565b81526020019060010190610f5b565b505050505081526020018673ffffffffffffffffffffffffffffffffffffffff168152602001600360008d67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054610fe290611fb3565b80601f016020809104026020016040519081016040528092919081815260200182805461100e90611fb3565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050815250905060005b8881101561115d576110d733308c8c8581811061108757611087612006565b905060400201602001358d8d868181106110a3576110a3612006565b6110b99260206040909202019081019150611d65565b73ffffffffffffffffffffffffffffffffffffffff16929190611601565b6002546111559073ffffffffffffffffffffffffffffffffffffffff168b8b8481811061110657611106612006565b905060400201602001358c8c8581811061112257611122612006565b6111389260206040909202019081019150611d65565b73ffffffffffffffffffffffffffffffffffffffff169190611665565b600101611068565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded906111b7908e908690600401612375565b602060405180830381865afa1580156111d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f8919061248a565b905073ffffffffffffffffffffffffffffffffffffffff86161561125f5761123873ffffffffffffffffffffffffffffffffffffffff8716333084611601565b60025461125f9073ffffffffffffffffffffffffffffffffffffffff888116911683611665565b60025473ffffffffffffffffffffffffffffffffffffffff908116906396f4e9f99088161561128f576000611291565b825b8d856040518463ffffffff1660e01b81526004016112b0929190612375565b60206040518083038185885af11580156112ce573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112f3919061248a565b94507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a8560405161132691815260200190565b60405180910390a1505050509695505050505050565b611344611350565b61134d81611763565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610662565b565b8047101561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610662565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611497576040519150601f19603f3d011682016040523d82523d6000602084013e61149c565b606091505b5050905080610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610662565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610dd99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611858565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261165f9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161157f565b50505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156116dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611700919061248a565b61170a91906124a3565b60405173ffffffffffffffffffffffffffffffffffffffff851660248201526044810182905290915061165f9085907f095ea7b3000000000000000000000000000000000000000000000000000000009060640161157f565b3373ffffffffffffffffffffffffffffffffffffffff8216036117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610662565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006118ba826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119649092919063ffffffff16565b805190915015610dd957808060200190518101906118d891906124e3565b610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610662565b6060611973848460008561197b565b949350505050565b606082471015611a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610662565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a369190612500565b60006040518083038185875af1925050503d8060008114611a73576040519150601f19603f3d011682016040523d82523d6000602084013e611a78565b606091505b5091509150611a8987838387611a94565b979650505050505050565b60608315611b2a578251600003611b235773ffffffffffffffffffffffffffffffffffffffff85163b611b23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610662565b5081611973565b6119738383815115611b3f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106629190612512565b508054611b7f90611fb3565b6000825580601f10611b8f575050565b601f01602090049060005260206000209081019061134d91905b80821115611bbd5760008155600101611ba9565b5090565b803567ffffffffffffffff81168114611bd957600080fd5b919050565b60008083601f840112611bf057600080fd5b50813567ffffffffffffffff811115611c0857600080fd5b602083019150836020828501011115611c2057600080fd5b9250929050565b600080600060408486031215611c3c57600080fd5b611c4584611bc1565b9250602084013567ffffffffffffffff811115611c6157600080fd5b611c6d86828701611bde565b9497909650939450505050565b600060208284031215611c8c57600080fd5b611c9582611bc1565b9392505050565b60005b83811015611cb7578181015183820152602001611c9f565b50506000910152565b60008151808452611cd8816020860160208601611c9c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000611d1d6040830185611cc0565b8281036020840152611d2f8185611cc0565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461134d57600080fd5b8035611bd981611d38565b600060208284031215611d7757600080fd5b8135611c9581611d38565b60008060408385031215611d9557600080fd5b8235611da081611d38565b946020939093013593505050565b600080600060608486031215611dc357600080fd5b8335611dce81611d38565b92506020840135611dde81611d38565b929592945050506040919091013590565b60008083601f840112611e0157600080fd5b50813567ffffffffffffffff811115611e1957600080fd5b6020830191508360208260051b8501011115611c2057600080fd5b60008060008060408587031215611e4a57600080fd5b843567ffffffffffffffff80821115611e6257600080fd5b611e6e88838901611def565b90965094506020870135915080821115611e8757600080fd5b50611e9487828801611def565b95989497509550505050565b60008060208385031215611eb357600080fd5b823567ffffffffffffffff811115611eca57600080fd5b611ed685828601611def565b90969095509350505050565b60008060008060008060808789031215611efb57600080fd5b611f0487611bc1565b9550602087013567ffffffffffffffff80821115611f2157600080fd5b818901915089601f830112611f3557600080fd5b813581811115611f4457600080fd5b8a60208260061b8501011115611f5957600080fd5b602083019750809650506040890135915080821115611f7757600080fd5b50611f8489828a01611bde565b9094509250611f97905060608801611d5a565b90509295509295509295565b8183823760009101908152919050565b600181811c90821680611fc757607f821691505b602082108103612000577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261206957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126120a857600080fd5b83018035915067ffffffffffffffff8211156120c357600080fd5b602001915036819003821315611c2057600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261206957600080fd5b801515811461134d57600080fd5b60006020828403121561212c57600080fd5b8135611c958161210c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610dd9576000816000526020600020601f850160051c8101602086101561218f5750805b601f850160051c820191505b818110156121ae5782815560010161219b565b505050505050565b67ffffffffffffffff8311156121ce576121ce612137565b6121e2836121dc8354611fb3565b83612166565b6000601f84116001811461223457600085156121fe5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610a41565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156122835786850135825560209485019460019092019101612263565b50868210156122be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60006040828403121561232f57600080fd5b6040516040810181811067ffffffffffffffff8211171561235257612352612137565b604052823561236081611d38565b81526020928301359281019290925250919050565b6000604067ffffffffffffffff851683526020604081850152845160a060408601526123a460e0860182611cc0565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808784030160608801526123df8383611cc0565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015612440578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001939093019290860190612401565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a0152955061247c8187611cc0565b9a9950505050505050505050565b60006020828403121561249c57600080fd5b5051919050565b808201808211156124dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b6000602082840312156124f557600080fd5b8151611c958161210c565b60008251612069818460208701611c9c565b602081526000611c956020830184611cc056fea164736f6c6343000818000a", } var CCIPSenderABI = CCIPSenderMetaData.ABI @@ -727,23 +727,41 @@ func (it *CCIPSenderChainAddedIterator) Close() error { type CCIPSenderChainAdded struct { RemoteChainSelector uint64 - Recipient []byte + Recipient common.Hash ExtraArgsBytes []byte Raw types.Log } -func (_CCIPSender *CCIPSenderFilterer) FilterChainAdded(opts *bind.FilterOpts) (*CCIPSenderChainAddedIterator, error) { +func (_CCIPSender *CCIPSenderFilterer) FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*CCIPSenderChainAddedIterator, error) { - logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "ChainAdded") + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } return &CCIPSenderChainAddedIterator{contract: _CCIPSender.contract, event: "ChainAdded", logs: logs, sub: sub}, nil } -func (_CCIPSender *CCIPSenderFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainAdded) (event.Subscription, error) { +func (_CCIPSender *CCIPSenderFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } - logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "ChainAdded") + logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -849,18 +867,28 @@ type CCIPSenderChainRemoved struct { Raw types.Log } -func (_CCIPSender *CCIPSenderFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*CCIPSenderChainRemovedIterator, error) { +func (_CCIPSender *CCIPSenderFilterer) FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*CCIPSenderChainRemovedIterator, error) { - logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "ChainRemoved") + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } + + logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } return &CCIPSenderChainRemovedIterator{contract: _CCIPSender.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil } -func (_CCIPSender *CCIPSenderFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainRemoved) (event.Subscription, error) { +func (_CCIPSender *CCIPSenderFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainRemoved, removeChainSelector []uint64) (event.Subscription, error) { + + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } - logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "ChainRemoved") + logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } @@ -1656,15 +1684,15 @@ type CCIPSenderInterface interface { ParseCCIPRouterModified(log types.Log) (*CCIPSenderCCIPRouterModified, error) - FilterChainAdded(opts *bind.FilterOpts) (*CCIPSenderChainAddedIterator, error) + FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*CCIPSenderChainAddedIterator, error) - WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainAdded) (event.Subscription, error) + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) ParseChainAdded(log types.Log) (*CCIPSenderChainAdded, error) - FilterChainRemoved(opts *bind.FilterOpts) (*CCIPSenderChainRemovedIterator, error) + FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*CCIPSenderChainRemovedIterator, error) - WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainRemoved) (event.Subscription, error) + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *CCIPSenderChainRemoved, removeChainSelector []uint64) (event.Subscription, error) ParseChainRemoved(log types.Log) (*CCIPSenderChainRemoved, error) diff --git a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go index 7fbdefc002..b41bd441ad 100644 --- a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go +++ b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var PingPongDemoMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"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\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162004c9b38038062004c9b833981016040819052620000349162000571565b81818181818181803380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200014d565b5050506001600160a01b038116620000f1576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200013f576200013f6001600160a01b03821683600019620001f8565b505050505050505062000696565b336001600160a01b03821603620001a75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002709190620005b0565b6200027c9190620005ca565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620002d891869190620002de16565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200032d906001600160a01b038516908490620003b4565b805190915015620003af57808060200190518101906200034e9190620005f2565b620003af5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008a565b505050565b6060620003c58484600085620003cd565b949350505050565b606082471015620004305760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008a565b600080866001600160a01b031685876040516200044e919062000643565b60006040518083038185875af1925050503d80600081146200048d576040519150601f19603f3d011682016040523d82523d6000602084013e62000492565b606091505b509092509050620004a687838387620004b1565b979650505050505050565b60608315620005255782516000036200051d576001600160a01b0385163b6200051d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008a565b5081620003c5565b620003c583838151156200053c5781518083602001fd5b8060405162461bcd60e51b81526004016200008a919062000661565b6001600160a01b03811681146200056e57600080fd5b50565b600080604083850312156200058557600080fd5b8251620005928162000558565b6020840151909250620005a58162000558565b809150509250929050565b600060208284031215620005c357600080fd5b5051919050565b80820180821115620005ec57634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200060557600080fd5b815180151581146200061657600080fd5b9392505050565b60005b838110156200063a57818101518382015260200162000620565b50506000910152565b60008251620006578184602087016200061d565b9190910192915050565b6020815260008251806020840152620006828160408501602087016200061d565b601f01601f19169190910160400192915050565b6145f580620006a66000396000f3fe6080604052600436106101dc5760003560e01c80636fef519e11610102578063b187bd2611610095578063e4ca875411610064578063e4ca87541461065a578063e89b44851461067a578063f2fde38b1461068d578063ff2deec3146106ad57600080fd5b8063b187bd26146105b9578063b5a11011146105f1578063bee518a414610611578063cf6730f81461063a57600080fd5b80638da5cb5b116100d15780638da5cb5b146105235780639d2aede51461054e5780639fe74e261461056e578063b0f479a11461058e57600080fd5b80636fef519e1461048557806379ba5097146104ce5780638462a2b9146104e357806385572ffb1461050357600080fd5b80632b6e5d631161017a578063536c6bfa11610149578063536c6bfa146103f85780635e35359e146104185780636939cd97146104385780636d62d6331461046557600080fd5b80632b6e5d631461032457806335f170ef1461037c5780634e12498b146103aa5780635075a9d4146103ca57600080fd5b806316c38b3c116101b657806316c38b3c14610280578063181f5a77146102a05780631892b906146102ef5780632874d8bf1461030f57600080fd5b806305bfe982146101e85780630e958d6b1461022e57806311e85dff1461025e57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506102186102033660046134ce565b60096020526000908152604090205460ff1681565b60405161022591906134e7565b60405180910390f35b34801561023a57600080fd5b5061024e61024936600461353e565b6106da565b6040519015158152602001610225565b34801561026a57600080fd5b5061027e6102793660046135e5565b610725565b005b34801561028c57600080fd5b5061027e61029b366004613610565b610899565b3480156102ac57600080fd5b5060408051808201909152601281527f50696e67506f6e6744656d6f20312e332e30000000000000000000000000000060208201525b604051610225919061369b565b3480156102fb57600080fd5b5061027e61030a3660046136ae565b6108f3565b34801561031b57600080fd5b5061027e610936565b34801561033057600080fd5b50600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b34801561038857600080fd5b5061039c6103973660046136ae565b610972565b6040516102259291906136cb565b3480156103b657600080fd5b5061027e6103c53660046135e5565b610a9e565b3480156103d657600080fd5b506103ea6103e53660046134ce565b610b6a565b604051908152602001610225565b34801561040457600080fd5b5061027e6104133660046136f9565b610b7d565b34801561042457600080fd5b5061027e610433366004613725565b610be1565b34801561044457600080fd5b506104586104533660046134ce565b610c76565b60405161022591906137c3565b34801561047157600080fd5b5061027e610480366004613857565b610e81565b34801561049157600080fd5b506102e26040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b3480156104da57600080fd5b5061027e61119b565b3480156104ef57600080fd5b5061027e6104fe3660046138d3565b611298565b34801561050f57600080fd5b5061027e61051e36600461393f565b6115f9565b34801561052f57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610357565b34801561055a57600080fd5b5061027e6105693660046135e5565b611906565b34801561057a57600080fd5b5061027e61058936600461397a565b6119c1565b34801561059a57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff16610357565b3480156105c557600080fd5b50600a547c0100000000000000000000000000000000000000000000000000000000900460ff1661024e565b3480156105fd57600080fd5b5061027e61060c3660046139bc565b611d41565b34801561061d57600080fd5b50600a5460405167ffffffffffffffff9091168152602001610225565b34801561064657600080fd5b5061027e61065536600461393f565b611eb1565b34801561066657600080fd5b5061027e6106753660046134ce565b6120ce565b6103ea610688366004613b1f565b612338565b34801561069957600080fd5b5061027e6106a83660046135e5565b61286e565b3480156106b957600080fd5b506008546103579073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906107099085908590613c2c565b9081526040519081900360200190205460ff1690509392505050565b61072d612882565b60085473ffffffffffffffffffffffffffffffffffffffff161561078e5761078e61076d60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612903565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935516901561083b5761083b6107fb60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612b03565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b6108a1612882565b600a80549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6108fb612882565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b61093e612882565b600a80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556109706001612c07565b565b60036020526000908152604090208054819061098d90613c3c565b80601f01602080910402602001604051908101604052809291908181526020018280546109b990613c3c565b8015610a065780601f106109db57610100808354040283529160200191610a06565b820191906000526020600020905b8154815290600101906020018083116109e957829003601f168201915b505050505090806001018054610a1b90613c3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4790613c3c565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905082565b610aa6612882565b73ffffffffffffffffffffffffffffffffffffffff8116610af3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6000610b77600583612d14565b92915050565b610b85612882565b610b8f8282612d27565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610be9612882565b610c0a73ffffffffffffffffffffffffffffffffffffffff84168383612e81565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e83604051610c6991815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610ce590613c3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1190613c3c565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b50505050508152602001600382018054610d7790613c3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610da390613c3c565b8015610df05780601f10610dc557610100808354040283529160200191610df0565b820191906000526020600020905b815481529060010190602001808311610dd357829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e735760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610e1e565b505050915250909392505050565b610e89612882565b6001610e96600584612d14565b14610ed5576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610ee58260025b60059190612ed7565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610f2d90613c3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5990613c3c565b8015610fa65780601f10610f7b57610100808354040283529160200191610fa6565b820191906000526020600020905b815481529060010190602001808311610f8957829003601f168201915b50505050508152602001600382018054610fbf90613c3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610feb90613c3c565b80156110385780601f1061100d57610100808354040283529160200191611038565b820191906000526020600020905b81548152906001019060200180831161101b57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156110bb5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611066565b5050505081525050905060005b81608001515181101561114a5761114283836080015183815181106110ef576110ef613c8f565b6020026020010151602001518460800151848151811061111157611111613c8f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612e819092919063ffffffff16565b6001016110c8565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610ecc565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6112a0612882565b60005b8181101561144357600360008484848181106112c1576112c1613c8f565b90506020028101906112d39190613cbe565b6112e19060208101906136ae565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061131857611318613c8f565b905060200281019061132a9190613cbe565b611338906020810190613cfc565b604051611346929190613c2c565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905582828281811061138d5761138d613c8f565b905060200281019061139f9190613cbe565b6113ad906020810190613cfc565b6040516113bb929190613c2c565b60405180910390208383838181106113d5576113d5613c8f565b90506020028101906113e79190613cbe565b6113f59060208101906136ae565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051611433911515815260200190565b60405180910390a36001016112a3565b5060005b838110156115f25760016003600087878581811061146757611467613c8f565b90506020028101906114799190613cbe565b6114879060208101906136ae565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018686848181106114be576114be613c8f565b90506020028101906114d09190613cbe565b6114de906020810190613cfc565b6040516114ec929190613c2c565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061153c5761153c613c8f565b905060200281019061154e9190613cbe565b61155c906020810190613cfc565b60405161156a929190613c2c565b604051809103902085858381811061158457611584613c8f565b90506020028101906115969190613cbe565b6115a49060208101906136ae565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb908160016040516115e2911515815260200190565b60405180910390a3600101611447565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461164c576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610ecc565b61165c60408201602083016136ae565b6116696040830183613cfc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506116c092509050613c3c565b159050806117165750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516117019190613d61565b9081526040519081900360200190205460ff16155b1561174f57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610ecc919061369b565b61175f60408401602085016136ae565b67ffffffffffffffff811660009081526003602052604090208054819061178590613c3c565b90506000036117cc576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ecc565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611808908890600401613e75565b600060405180830381600087803b15801561182257600080fd5b505af1925050508015611833575060015b6118d3573d808015611861576040519150601f19603f3d011682016040523d82523d6000602084013e611866565b606091505b5061187386356001610edc565b508535600090815260046020526040902086906118908282614247565b50506040518635907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906118c590849061369b565b60405180910390a2506115f2565b6040518535907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050505050565b61190e612882565b600a80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152600a5467ffffffffffffffff166000908152600360205220906119bd9082614341565b5050565b6119c9612882565b60005b81811015611d3c578282828181106119e6576119e6613c8f565b90506020028101906119f8919061445b565b611a09906040810190602001613610565b611adc5760036000848484818110611a2357611a23613c8f565b9050602002810190611a35919061445b565b611a439060208101906136ae565b67ffffffffffffffff16815260208101919091526040016000908120611a6891613480565b7f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916838383818110611a9b57611a9b613c8f565b9050602002810190611aad919061445b565b611abb9060208101906136ae565b60405167ffffffffffffffff909116815260200160405180910390a1611d34565b828282818110611aee57611aee613c8f565b9050602002810190611b00919061445b565b611b0e906040810190613cfc565b9050600003611b49576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858585818110611b6157611b61613c8f565b9050602002810190611b73919061445b565b611b819060208101906136ae565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611bb757611bb7613c8f565b9050602002810190611bc9919061445b565b611bd7906040810190613cfc565b8291611be4919083613fcb565b50838383818110611bf757611bf7613c8f565b9050602002810190611c09919061445b565b611c17906060810190613cfc565b159050611c6257838383818110611c3057611c30613c8f565b9050602002810190611c42919061445b565b611c50906060810190613cfc565b6001830191611c60919083613fcb565b505b7f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212848484818110611c9557611c95613c8f565b9050602002810190611ca7919061445b565b611cb59060208101906136ae565b858585818110611cc757611cc7613c8f565b9050602002810190611cd9919061445b565b611ce7906040810190613cfc565b878787818110611cf957611cf9613c8f565b9050602002810190611d0b919061445b565b611d19906060810190613cfc565b604051611d2a95949392919061448f565b60405180910390a1505b6001016119cc565b505050565b611d49612882565b600a805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600360209081526040918290208251918201939093526001926002019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e0491613d61565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff8416600090815260036020522090611d3c9082614341565b333014611eea576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611efa60408201602083016136ae565b611f076040830183613cfc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526003602052604090208054909350611f5e92509050613c3c565b15905080611fb45750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051611f9f9190613d61565b9081526040519081900360200190205460ff16155b15611fed57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610ecc919061369b565b611ffd60408401602085016136ae565b67ffffffffffffffff811660009081526003602052604090208054819061202390613c3c565b905060000361206a576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ecc565b60006120796060870187613cfc565b81019061208691906134ce565b600a549091507c0100000000000000000000000000000000000000000000000000000000900460ff166120c6576120c66120c18260016144d2565b612c07565b505050505050565b60016120db600583612d14565b14612115576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610ecc565b612120816000610edc565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff1693810193909352600281018054919284019161216890613c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461219490613c3c565b80156121e15780601f106121b6576101008083540402835291602001916121e1565b820191906000526020600020905b8154815290600101906020018083116121c457829003601f168201915b505050505081526020016003820180546121fa90613c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461222690613c3c565b80156122735780601f1061224857610100808354040283529160200191612273565b820191906000526020600020905b81548152906001019060200180831161225657829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156122f65760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016122a1565b5050505081525050905061230981612eec565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff831660009081526003602052604081208054859190819061236190613c3c565b90506000036123a8576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ecc565b6040805160a08101825267ffffffffffffffff88166000908152600360205291822080548291906123d890613c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461240490613c3c565b80156124515780601f1061242657610100808354040283529160200191612451565b820191906000526020600020905b81548152906001019060200180831161243457829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b1660009081526003909252902060010180546080909201916124b290613c3c565b80601f01602080910402602001604051908101604052809291908181526020018280546124de90613c3c565b801561252b5780601f106125005761010080835404028352916020019161252b565b820191906000526020600020905b81548152906001019060200180831161250e57829003601f168201915b5050505050815250905060005b8651811015612688576125a8333089848151811061255857612558613c8f565b6020026020010151602001518a858151811061257657612576613c8f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612ef4909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff909116908890839081106125d8576125d8613c8f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146126805760025487516126809173ffffffffffffffffffffffffffffffffffffffff169089908490811061263157612631613c8f565b60200260200101516020015189848151811061264f5761264f613c8f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166129039092919063ffffffff16565b600101612538565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded906126e2908b9086906004016144e5565b602060405180830381865afa1580156126ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272391906145b2565b60085490915073ffffffffffffffffffffffffffffffffffffffff1615612769576008546127699073ffffffffffffffffffffffffffffffffffffffff16333084612ef4565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f991161561279b57600061279d565b825b8a856040518463ffffffff1660e01b81526004016127bc9291906144e5565b60206040518083038185885af11580156127da573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127ff91906145b2565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b612876612882565b61287f81612f52565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610ecc565b8015806129a357506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561297d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a191906145b2565b155b612a2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610ecc565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611d3c9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613047565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9e91906145b2565b612ba891906144d2565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150612c019085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612a81565b50505050565b80600116600103612c4a576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612c7e565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b600081604051602001612c9391815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152600a54600080855260208501909352909350611d3c9267ffffffffffffffff90911691612d0d565b6040805180820190915260008082526020820152815260200190600190039081612ce65790505b5083612338565b6000612d208383613153565b9392505050565b80471015612d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ecc565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612deb576040519150601f19603f3d011682016040523d82523d6000602084013e612df0565b606091505b5050905080611d3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ecc565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611d3c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612a81565b6000612ee48484846131dd565b949350505050565b61287f612882565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612c019085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612a81565b3373ffffffffffffffffffffffffffffffffffffffff821603612fd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610ecc565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006130a9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131fa9092919063ffffffff16565b805190915015611d3c57808060200190518101906130c791906145cb565b611d3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ecc565b60008181526002830160205260408120548015158061317757506131778484613209565b612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610ecc565b60008281526002840160205260408120829055612ee48484613215565b6060612ee48484600085613221565b6000612d20838361333a565b6000612d208383613352565b6060824710156132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ecc565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516132dc9190613d61565b60006040518083038185875af1925050503d8060008114613319576040519150601f19603f3d011682016040523d82523d6000602084013e61331e565b606091505b509150915061332f878383876133a1565b979650505050505050565b60008181526001830160205260408120541515612d20565b600081815260018301602052604081205461339957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b77565b506000610b77565b606083156134375782516000036134305773ffffffffffffffffffffffffffffffffffffffff85163b613430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ecc565b5081612ee4565b612ee4838381511561344c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc919061369b565b50805461348c90613c3c565b6000825580601f1061349c575050565b601f01602090049060005260206000209081019061287f91905b808211156134ca57600081556001016134b6565b5090565b6000602082840312156134e057600080fd5b5035919050565b6020810160038310613522577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff8116811461287f57600080fd5b60008060006040848603121561355357600080fd5b833561355e81613528565b9250602084013567ffffffffffffffff8082111561357b57600080fd5b818601915086601f83011261358f57600080fd5b81358181111561359e57600080fd5b8760208285010111156135b057600080fd5b6020830194508093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff8116811461287f57600080fd5b6000602082840312156135f757600080fd5b8135612d20816135c3565b801515811461287f57600080fd5b60006020828403121561362257600080fd5b8135612d2081613602565b60005b83811015613648578181015183820152602001613630565b50506000910152565b6000815180845261366981602086016020860161362d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612d206020830184613651565b6000602082840312156136c057600080fd5b8135612d2081613528565b6040815260006136de6040830185613651565b82810360208401526136f08185613651565b95945050505050565b6000806040838503121561370c57600080fd5b8235613717816135c3565b946020939093013593505050565b60008060006060848603121561373a57600080fd5b8335613745816135c3565b92506020840135613755816135c3565b929592945050506040919091013590565b60008151808452602080850194506020840160005b838110156137b8578151805173ffffffffffffffffffffffffffffffffffffffff168852830151838801526040909601959082019060010161377b565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a060608401526137fd60c0840182613651565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526138398383613651565b925060808601519150808584030160a0860152506136f08282613766565b6000806040838503121561386a57600080fd5b82359150602083013561387c816135c3565b809150509250929050565b60008083601f84011261389957600080fd5b50813567ffffffffffffffff8111156138b157600080fd5b6020830191508360208260051b85010111156138cc57600080fd5b9250929050565b600080600080604085870312156138e957600080fd5b843567ffffffffffffffff8082111561390157600080fd5b61390d88838901613887565b9096509450602087013591508082111561392657600080fd5b5061393387828801613887565b95989497509550505050565b60006020828403121561395157600080fd5b813567ffffffffffffffff81111561396857600080fd5b820160a08185031215612d2057600080fd5b6000806020838503121561398d57600080fd5b823567ffffffffffffffff8111156139a457600080fd5b6139b085828601613887565b90969095509350505050565b600080604083850312156139cf57600080fd5b82356139da81613528565b9150602083013561387c816135c3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613a3c57613a3c6139ea565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a8957613a896139ea565b604052919050565b600082601f830112613aa257600080fd5b813567ffffffffffffffff811115613abc57613abc6139ea565b613aed60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613a42565b818152846020838601011115613b0257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613b3457600080fd5b8335613b3f81613528565b925060208481013567ffffffffffffffff80821115613b5d57600080fd5b818701915087601f830112613b7157600080fd5b813581811115613b8357613b836139ea565b613b91848260051b01613a42565b81815260069190911b8301840190848101908a831115613bb057600080fd5b938501935b82851015613bfc576040858c031215613bce5760008081fd5b613bd6613a19565b8535613be1816135c3565b81528587013587820152825260409094019390850190613bb5565b965050506040870135925080831115613c1457600080fd5b5050613c2286828701613a91565b9150509250925092565b8183823760009101908152919050565b600181811c90821680613c5057607f821691505b602082108103613c89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613cf257600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613d3157600080fd5b83018035915067ffffffffffffffff821115613d4c57600080fd5b6020019150368190038213156138cc57600080fd5b60008251613cf281846020870161362d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613da857600080fd5b830160208101925035905067ffffffffffffffff811115613dc857600080fd5b8036038213156138cc57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156137b8578135613e43816135c3565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613e30565b602081528135602082015260006020830135613e9081613528565b67ffffffffffffffff8082166040850152613eae6040860186613d73565b925060a06060860152613ec560c086018483613dd7565b925050613ed56060860186613d73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613f0b858385613dd7565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613f4457600080fd5b60209288019283019235915083821115613f5d57600080fd5b8160061b3603831315613f6f57600080fd5b8685030160a087015261332f848284613e20565b601f821115611d3c576000816000526020600020601f850160051c81016020861015613fac5750805b601f850160051c820191505b818110156120c657828155600101613fb8565b67ffffffffffffffff831115613fe357613fe36139ea565b613ff783613ff18354613c3c565b83613f83565b6000601f84116001811461404957600085156140135750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556115f2565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140985786850135825560209485019460019092019101614078565b50868210156140d3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561411f816135c3565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b68010000000000000000831115614185576141856139ea565b8054838255808410156142125760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146141c6576141c66140e5565b80861686146141d7576141d76140e5565b5060008360005260206000208360011b81018760011b820191505b8082101561420d5782825582848301556002820191506141f2565b505050505b5060008181526020812083915b858110156120c6576142318383614114565b604092909201916002919091019060010161421f565b8135815560018101602083013561425d81613528565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000084541617835561429d6040860186613cfc565b935091506142af838360028701613fcb565b6142bc6060860186613cfc565b935091506142ce838360038701613fcb565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261430557600080fd5b91840191823591508082111561431a57600080fd5b506020820191508060061b360382131561433357600080fd5b612c0181836004860161416c565b815167ffffffffffffffff81111561435b5761435b6139ea565b61436f816143698454613c3c565b84613f83565b602080601f8311600181146143c2576000841561438c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556120c6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561440f578886015182559484019460019091019084016143f0565b508582101561444b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613cf257600080fd5b67ffffffffffffffff861681526060602082015260006144b3606083018688613dd7565b82810360408401526144c6818587613dd7565b98975050505050505050565b80820180821115610b7757610b776140e5565b67ffffffffffffffff83168152604060208201526000825160a0604084015261451160e0840182613651565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08085840301606086015261454d8383613651565b9250604086015191508085840301608086015261456a8383613766565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506145a88282613651565b9695505050505050565b6000602082840312156145c457600080fd5b5051919050565b6000602082840312156145dd57600080fd5b8151612d208161360256fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"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\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162004c8238038062004c82833981016040819052620000349162000571565b81818181818181803380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200014d565b5050506001600160a01b038116620000f1576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200013f576200013f6001600160a01b03821683600019620001f8565b505050505050505062000696565b336001600160a01b03821603620001a75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002709190620005b0565b6200027c9190620005ca565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620002d891869190620002de16565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200032d906001600160a01b038516908490620003b4565b805190915015620003af57808060200190518101906200034e9190620005f2565b620003af5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008a565b505050565b6060620003c58484600085620003cd565b949350505050565b606082471015620004305760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008a565b600080866001600160a01b031685876040516200044e919062000643565b60006040518083038185875af1925050503d80600081146200048d576040519150601f19603f3d011682016040523d82523d6000602084013e62000492565b606091505b509092509050620004a687838387620004b1565b979650505050505050565b60608315620005255782516000036200051d576001600160a01b0385163b6200051d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008a565b5081620003c5565b620003c583838151156200053c5781518083602001fd5b8060405162461bcd60e51b81526004016200008a919062000661565b6001600160a01b03811681146200056e57600080fd5b50565b600080604083850312156200058557600080fd5b8251620005928162000558565b6020840151909250620005a58162000558565b809150509250929050565b600060208284031215620005c357600080fd5b5051919050565b80820180821115620005ec57634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200060557600080fd5b815180151581146200061657600080fd5b9392505050565b60005b838110156200063a57818101518382015260200162000620565b50506000910152565b60008251620006578184602087016200061d565b9190910192915050565b6020815260008251806020840152620006828160408501602087016200061d565b601f01601f19169190910160400192915050565b6145dc80620006a66000396000f3fe6080604052600436106101dc5760003560e01c80636fef519e11610102578063b187bd2611610095578063e4ca875411610064578063e4ca87541461065a578063e89b44851461067a578063f2fde38b1461068d578063ff2deec3146106ad57600080fd5b8063b187bd26146105b9578063b5a11011146105f1578063bee518a414610611578063cf6730f81461063a57600080fd5b80638da5cb5b116100d15780638da5cb5b146105235780639d2aede51461054e5780639fe74e261461056e578063b0f479a11461058e57600080fd5b80636fef519e1461048557806379ba5097146104ce5780638462a2b9146104e357806385572ffb1461050357600080fd5b80632b6e5d631161017a578063536c6bfa11610149578063536c6bfa146103f85780635e35359e146104185780636939cd97146104385780636d62d6331461046557600080fd5b80632b6e5d631461032457806335f170ef1461037c5780634e12498b146103aa5780635075a9d4146103ca57600080fd5b806316c38b3c116101b657806316c38b3c14610280578063181f5a77146102a05780631892b906146102ef5780632874d8bf1461030f57600080fd5b806305bfe982146101e85780630e958d6b1461022e57806311e85dff1461025e57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506102186102033660046134e4565b60096020526000908152604090205460ff1681565b60405161022591906134fd565b60405180910390f35b34801561023a57600080fd5b5061024e610249366004613554565b6106da565b6040519015158152602001610225565b34801561026a57600080fd5b5061027e6102793660046135fb565b610725565b005b34801561028c57600080fd5b5061027e61029b366004613626565b610899565b3480156102ac57600080fd5b5060408051808201909152601281527f50696e67506f6e6744656d6f20312e332e30000000000000000000000000000060208201525b60405161022591906136b1565b3480156102fb57600080fd5b5061027e61030a3660046136c4565b6108f3565b34801561031b57600080fd5b5061027e610936565b34801561033057600080fd5b50600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b34801561038857600080fd5b5061039c6103973660046136c4565b610972565b6040516102259291906136e1565b3480156103b657600080fd5b5061027e6103c53660046135fb565b610a9e565b3480156103d657600080fd5b506103ea6103e53660046134e4565b610b6a565b604051908152602001610225565b34801561040457600080fd5b5061027e61041336600461370f565b610b7d565b34801561042457600080fd5b5061027e61043336600461373b565b610be1565b34801561044457600080fd5b506104586104533660046134e4565b610c76565b60405161022591906137d9565b34801561047157600080fd5b5061027e61048036600461386d565b610e81565b34801561049157600080fd5b506102e26040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b3480156104da57600080fd5b5061027e61119b565b3480156104ef57600080fd5b5061027e6104fe3660046138e9565b611298565b34801561050f57600080fd5b5061027e61051e366004613955565b6115f9565b34801561052f57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610357565b34801561055a57600080fd5b5061027e6105693660046135fb565b611906565b34801561057a57600080fd5b5061027e610589366004613990565b6119c1565b34801561059a57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff16610357565b3480156105c557600080fd5b50600a547c0100000000000000000000000000000000000000000000000000000000900460ff1661024e565b3480156105fd57600080fd5b5061027e61060c3660046139d2565b611d57565b34801561061d57600080fd5b50600a5460405167ffffffffffffffff9091168152602001610225565b34801561064657600080fd5b5061027e610655366004613955565b611ec7565b34801561066657600080fd5b5061027e6106753660046134e4565b6120e4565b6103ea610688366004613b35565b61234e565b34801561069957600080fd5b5061027e6106a83660046135fb565b612884565b3480156106b957600080fd5b506008546103579073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906107099085908590613c42565b9081526040519081900360200190205460ff1690509392505050565b61072d612898565b60085473ffffffffffffffffffffffffffffffffffffffff161561078e5761078e61076d60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612919565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935516901561083b5761083b6107fb60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612b19565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b6108a1612898565b600a80549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6108fb612898565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b61093e612898565b600a80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556109706001612c1d565b565b60036020526000908152604090208054819061098d90613c52565b80601f01602080910402602001604051908101604052809291908181526020018280546109b990613c52565b8015610a065780601f106109db57610100808354040283529160200191610a06565b820191906000526020600020905b8154815290600101906020018083116109e957829003601f168201915b505050505090806001018054610a1b90613c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4790613c52565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905082565b610aa6612898565b73ffffffffffffffffffffffffffffffffffffffff8116610af3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6000610b77600583612d2a565b92915050565b610b85612898565b610b8f8282612d3d565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610be9612898565b610c0a73ffffffffffffffffffffffffffffffffffffffff84168383612e97565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e83604051610c6991815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610ce590613c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1190613c52565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b50505050508152602001600382018054610d7790613c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610da390613c52565b8015610df05780601f10610dc557610100808354040283529160200191610df0565b820191906000526020600020905b815481529060010190602001808311610dd357829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e735760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610e1e565b505050915250909392505050565b610e89612898565b6001610e96600584612d2a565b14610ed5576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610ee58260025b60059190612eed565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610f2d90613c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5990613c52565b8015610fa65780601f10610f7b57610100808354040283529160200191610fa6565b820191906000526020600020905b815481529060010190602001808311610f8957829003601f168201915b50505050508152602001600382018054610fbf90613c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610feb90613c52565b80156110385780601f1061100d57610100808354040283529160200191611038565b820191906000526020600020905b81548152906001019060200180831161101b57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156110bb5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611066565b5050505081525050905060005b81608001515181101561114a5761114283836080015183815181106110ef576110ef613ca5565b6020026020010151602001518460800151848151811061111157611111613ca5565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612e979092919063ffffffff16565b6001016110c8565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610ecc565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6112a0612898565b60005b8181101561144357600360008484848181106112c1576112c1613ca5565b90506020028101906112d39190613cd4565b6112e19060208101906136c4565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061131857611318613ca5565b905060200281019061132a9190613cd4565b611338906020810190613d12565b604051611346929190613c42565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905582828281811061138d5761138d613ca5565b905060200281019061139f9190613cd4565b6113ad906020810190613d12565b6040516113bb929190613c42565b60405180910390208383838181106113d5576113d5613ca5565b90506020028101906113e79190613cd4565b6113f59060208101906136c4565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051611433911515815260200190565b60405180910390a36001016112a3565b5060005b838110156115f25760016003600087878581811061146757611467613ca5565b90506020028101906114799190613cd4565b6114879060208101906136c4565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018686848181106114be576114be613ca5565b90506020028101906114d09190613cd4565b6114de906020810190613d12565b6040516114ec929190613c42565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061153c5761153c613ca5565b905060200281019061154e9190613cd4565b61155c906020810190613d12565b60405161156a929190613c42565b604051809103902085858381811061158457611584613ca5565b90506020028101906115969190613cd4565b6115a49060208101906136c4565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb908160016040516115e2911515815260200190565b60405180910390a3600101611447565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461164c576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610ecc565b61165c60408201602083016136c4565b6116696040830183613d12565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506116c092509050613c52565b159050806117165750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516117019190613d77565b9081526040519081900360200190205460ff16155b1561174f57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610ecc91906136b1565b61175f60408401602085016136c4565b67ffffffffffffffff811660009081526003602052604090208054819061178590613c52565b90506000036117cc576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ecc565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611808908890600401613e8b565b600060405180830381600087803b15801561182257600080fd5b505af1925050508015611833575060015b6118d3573d808015611861576040519150601f19603f3d011682016040523d82523d6000602084013e611866565b606091505b5061187386356001610edc565b50853560009081526004602052604090208690611890828261425d565b50506040518635907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906118c59084906136b1565b60405180910390a2506115f2565b6040518535907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050505050565b61190e612898565b600a80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152600a5467ffffffffffffffff166000908152600360205220906119bd9082614357565b5050565b6119c9612898565b60005b81811015611d52578282828181106119e6576119e6613ca5565b90506020028101906119f89190614471565b611a09906040810190602001613626565b611ad55760036000848484818110611a2357611a23613ca5565b9050602002810190611a359190614471565b611a439060208101906136c4565b67ffffffffffffffff16815260208101919091526040016000908120611a6891613496565b828282818110611a7a57611a7a613ca5565b9050602002810190611a8c9190614471565b611a9a9060208101906136c4565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a2611d4a565b828282818110611ae757611ae7613ca5565b9050602002810190611af99190614471565b611b07906040810190613d12565b9050600003611b42576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858585818110611b5a57611b5a613ca5565b9050602002810190611b6c9190614471565b611b7a9060208101906136c4565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611bb057611bb0613ca5565b9050602002810190611bc29190614471565b611bd0906040810190613d12565b8291611bdd919083613fe1565b50838383818110611bf057611bf0613ca5565b9050602002810190611c029190614471565b611c10906060810190613d12565b159050611c5b57838383818110611c2957611c29613ca5565b9050602002810190611c3b9190614471565b611c49906060810190613d12565b6001830191611c59919083613fe1565b505b838383818110611c6d57611c6d613ca5565b9050602002810190611c7f9190614471565b611c8d906040810190613d12565b604051611c9b929190613c42565b6040518091039020848484818110611cb557611cb5613ca5565b9050602002810190611cc79190614471565b611cd59060208101906136c4565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212868686818110611d1257611d12613ca5565b9050602002810190611d249190614471565b611d32906060810190613d12565b604051611d409291906144a5565b60405180910390a3505b6001016119cc565b505050565b611d5f612898565b600a805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600360209081526040918290208251918201939093526001926002019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1a91613d77565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff8416600090815260036020522090611d529082614357565b333014611f00576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f1060408201602083016136c4565b611f1d6040830183613d12565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526003602052604090208054909350611f7492509050613c52565b15905080611fca5750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051611fb59190613d77565b9081526040519081900360200190205460ff16155b1561200357806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610ecc91906136b1565b61201360408401602085016136c4565b67ffffffffffffffff811660009081526003602052604090208054819061203990613c52565b9050600003612080576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ecc565b600061208f6060870187613d12565b81019061209c91906134e4565b600a549091507c0100000000000000000000000000000000000000000000000000000000900460ff166120dc576120dc6120d78260016144b9565b612c1d565b505050505050565b60016120f1600583612d2a565b1461212b576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610ecc565b612136816000610edc565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff1693810193909352600281018054919284019161217e90613c52565b80601f01602080910402602001604051908101604052809291908181526020018280546121aa90613c52565b80156121f75780601f106121cc576101008083540402835291602001916121f7565b820191906000526020600020905b8154815290600101906020018083116121da57829003601f168201915b5050505050815260200160038201805461221090613c52565b80601f016020809104026020016040519081016040528092919081815260200182805461223c90613c52565b80156122895780601f1061225e57610100808354040283529160200191612289565b820191906000526020600020905b81548152906001019060200180831161226c57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561230c5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016122b7565b5050505081525050905061231f81612f02565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff831660009081526003602052604081208054859190819061237790613c52565b90506000036123be576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ecc565b6040805160a08101825267ffffffffffffffff88166000908152600360205291822080548291906123ee90613c52565b80601f016020809104026020016040519081016040528092919081815260200182805461241a90613c52565b80156124675780601f1061243c57610100808354040283529160200191612467565b820191906000526020600020905b81548152906001019060200180831161244a57829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b1660009081526003909252902060010180546080909201916124c890613c52565b80601f01602080910402602001604051908101604052809291908181526020018280546124f490613c52565b80156125415780601f1061251657610100808354040283529160200191612541565b820191906000526020600020905b81548152906001019060200180831161252457829003601f168201915b5050505050815250905060005b865181101561269e576125be333089848151811061256e5761256e613ca5565b6020026020010151602001518a858151811061258c5761258c613ca5565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612f0a909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff909116908890839081106125ee576125ee613ca5565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146126965760025487516126969173ffffffffffffffffffffffffffffffffffffffff169089908490811061264757612647613ca5565b60200260200101516020015189848151811061266557612665613ca5565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166129199092919063ffffffff16565b60010161254e565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded906126f8908b9086906004016144cc565b602060405180830381865afa158015612715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127399190614599565b60085490915073ffffffffffffffffffffffffffffffffffffffff161561277f5760085461277f9073ffffffffffffffffffffffffffffffffffffffff16333084612f0a565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f99116156127b15760006127b3565b825b8a856040518463ffffffff1660e01b81526004016127d29291906144cc565b60206040518083038185885af11580156127f0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128159190614599565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b61288c612898565b61289581612f68565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610ecc565b8015806129b957506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b79190614599565b155b612a45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610ecc565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611d529084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261305d565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190614599565b612bbe91906144b9565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150612c179085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612a97565b50505050565b80600116600103612c60576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612c94565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b600081604051602001612ca991815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152600a54600080855260208501909352909350611d529267ffffffffffffffff90911691612d23565b6040805180820190915260008082526020820152815260200190600190039081612cfc5790505b508361234e565b6000612d368383613169565b9392505050565b80471015612da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ecc565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612e01576040519150601f19603f3d011682016040523d82523d6000602084013e612e06565b606091505b5050905080611d52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ecc565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611d529084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612a97565b6000612efa8484846131f3565b949350505050565b612895612898565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612c179085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612a97565b3373ffffffffffffffffffffffffffffffffffffffff821603612fe7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610ecc565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006130bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132109092919063ffffffff16565b805190915015611d5257808060200190518101906130dd91906145b2565b611d52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ecc565b60008181526002830160205260408120548015158061318d575061318d848461321f565b612d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610ecc565b60008281526002840160205260408120829055612efa848461322b565b6060612efa8484600085613237565b6000612d368383613350565b6000612d368383613368565b6060824710156132c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ecc565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516132f29190613d77565b60006040518083038185875af1925050503d806000811461332f576040519150601f19603f3d011682016040523d82523d6000602084013e613334565b606091505b5091509150613345878383876133b7565b979650505050505050565b60008181526001830160205260408120541515612d36565b60008181526001830160205260408120546133af57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b77565b506000610b77565b6060831561344d5782516000036134465773ffffffffffffffffffffffffffffffffffffffff85163b613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ecc565b5081612efa565b612efa83838151156134625781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc91906136b1565b5080546134a290613c52565b6000825580601f106134b2575050565b601f01602090049060005260206000209081019061289591905b808211156134e057600081556001016134cc565b5090565b6000602082840312156134f657600080fd5b5035919050565b6020810160038310613538577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff8116811461289557600080fd5b60008060006040848603121561356957600080fd5b83356135748161353e565b9250602084013567ffffffffffffffff8082111561359157600080fd5b818601915086601f8301126135a557600080fd5b8135818111156135b457600080fd5b8760208285010111156135c657600080fd5b6020830194508093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff8116811461289557600080fd5b60006020828403121561360d57600080fd5b8135612d36816135d9565b801515811461289557600080fd5b60006020828403121561363857600080fd5b8135612d3681613618565b60005b8381101561365e578181015183820152602001613646565b50506000910152565b6000815180845261367f816020860160208601613643565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612d366020830184613667565b6000602082840312156136d657600080fd5b8135612d368161353e565b6040815260006136f46040830185613667565b82810360208401526137068185613667565b95945050505050565b6000806040838503121561372257600080fd5b823561372d816135d9565b946020939093013593505050565b60008060006060848603121561375057600080fd5b833561375b816135d9565b9250602084013561376b816135d9565b929592945050506040919091013590565b60008151808452602080850194506020840160005b838110156137ce578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613791565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a0606084015261381360c0840182613667565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08085840301608086015261384f8383613667565b925060808601519150808584030160a086015250613706828261377c565b6000806040838503121561388057600080fd5b823591506020830135613892816135d9565b809150509250929050565b60008083601f8401126138af57600080fd5b50813567ffffffffffffffff8111156138c757600080fd5b6020830191508360208260051b85010111156138e257600080fd5b9250929050565b600080600080604085870312156138ff57600080fd5b843567ffffffffffffffff8082111561391757600080fd5b6139238883890161389d565b9096509450602087013591508082111561393c57600080fd5b506139498782880161389d565b95989497509550505050565b60006020828403121561396757600080fd5b813567ffffffffffffffff81111561397e57600080fd5b820160a08185031215612d3657600080fd5b600080602083850312156139a357600080fd5b823567ffffffffffffffff8111156139ba57600080fd5b6139c68582860161389d565b90969095509350505050565b600080604083850312156139e557600080fd5b82356139f08161353e565b91506020830135613892816135d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613a5257613a52613a00565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a9f57613a9f613a00565b604052919050565b600082601f830112613ab857600080fd5b813567ffffffffffffffff811115613ad257613ad2613a00565b613b0360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613a58565b818152846020838601011115613b1857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613b4a57600080fd5b8335613b558161353e565b925060208481013567ffffffffffffffff80821115613b7357600080fd5b818701915087601f830112613b8757600080fd5b813581811115613b9957613b99613a00565b613ba7848260051b01613a58565b81815260069190911b8301840190848101908a831115613bc657600080fd5b938501935b82851015613c12576040858c031215613be45760008081fd5b613bec613a2f565b8535613bf7816135d9565b81528587013587820152825260409094019390850190613bcb565b965050506040870135925080831115613c2a57600080fd5b5050613c3886828701613aa7565b9150509250925092565b8183823760009101908152919050565b600181811c90821680613c6657607f821691505b602082108103613c9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613d0857600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613d4757600080fd5b83018035915067ffffffffffffffff821115613d6257600080fd5b6020019150368190038213156138e257600080fd5b60008251613d08818460208701613643565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613dbe57600080fd5b830160208101925035905067ffffffffffffffff811115613dde57600080fd5b8036038213156138e257600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156137ce578135613e59816135d9565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613e46565b602081528135602082015260006020830135613ea68161353e565b67ffffffffffffffff8082166040850152613ec46040860186613d89565b925060a06060860152613edb60c086018483613ded565b925050613eeb6060860186613d89565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613f21858385613ded565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613f5a57600080fd5b60209288019283019235915083821115613f7357600080fd5b8160061b3603831315613f8557600080fd5b8685030160a0870152613345848284613e36565b601f821115611d52576000816000526020600020601f850160051c81016020861015613fc25750805b601f850160051c820191505b818110156120dc57828155600101613fce565b67ffffffffffffffff831115613ff957613ff9613a00565b61400d836140078354613c52565b83613f99565b6000601f84116001811461405f57600085156140295750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556115f2565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140ae578685013582556020948501946001909201910161408e565b50868210156140e9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8135614135816135d9565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561419b5761419b613a00565b8054838255808410156142285760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146141dc576141dc6140fb565b80861686146141ed576141ed6140fb565b5060008360005260206000208360011b81018760011b820191505b80821015614223578282558284830155600282019150614208565b505050505b5060008181526020812083915b858110156120dc57614247838361412a565b6040929092019160029190910190600101614235565b813581556001810160208301356142738161353e565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556142b36040860186613d12565b935091506142c5838360028701613fe1565b6142d26060860186613d12565b935091506142e4838360038701613fe1565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261431b57600080fd5b91840191823591508082111561433057600080fd5b506020820191508060061b360382131561434957600080fd5b612c17818360048601614182565b815167ffffffffffffffff81111561437157614371613a00565b6143858161437f8454613c52565b84613f99565b602080601f8311600181146143d857600084156143a25750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556120dc565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561442557888601518255948401946001909101908401614406565b508582101561446157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613d0857600080fd5b602081526000612efa602083018486613ded565b80820180821115610b7757610b776140fb565b67ffffffffffffffff83168152604060208201526000825160a060408401526144f860e0840182613667565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526145348383613667565b92506040860151915080858403016080860152614551838361377c565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c08601525061458f8282613667565b9695505050505050565b6000602082840312156145ab57600080fd5b5051919050565b6000602082840312156145c457600080fd5b8151612d368161361856fea164736f6c6343000818000a", } var PingPongDemoABI = PingPongDemoMetaData.ABI @@ -1053,23 +1053,41 @@ func (it *PingPongDemoChainAddedIterator) Close() error { type PingPongDemoChainAdded struct { RemoteChainSelector uint64 - Recipient []byte + Recipient common.Hash ExtraArgsBytes []byte Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterChainAdded(opts *bind.FilterOpts) (*PingPongDemoChainAddedIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*PingPongDemoChainAddedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ChainAdded") + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } return &PingPongDemoChainAddedIterator{contract: _PingPongDemo.contract, event: "ChainAdded", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainAdded) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ChainAdded") + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -1175,18 +1193,28 @@ type PingPongDemoChainRemoved struct { Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*PingPongDemoChainRemovedIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*PingPongDemoChainRemovedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ChainRemoved") + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } return &PingPongDemoChainRemovedIterator{contract: _PingPongDemo.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainRemoved) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainRemoved, removeChainSelector []uint64) (event.Subscription, error) { + + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ChainRemoved") + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } @@ -3084,15 +3112,15 @@ type PingPongDemoInterface interface { ParseCCIPRouterModified(log types.Log) (*PingPongDemoCCIPRouterModified, error) - FilterChainAdded(opts *bind.FilterOpts) (*PingPongDemoChainAddedIterator, error) + FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*PingPongDemoChainAddedIterator, error) - WatchChainAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainAdded) (event.Subscription, error) + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) ParseChainAdded(log types.Log) (*PingPongDemoChainAdded, error) - FilterChainRemoved(opts *bind.FilterOpts) (*PingPongDemoChainRemovedIterator, error) + FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*PingPongDemoChainRemovedIterator, error) - WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainRemoved) (event.Subscription, error) + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainRemoved, removeChainSelector []uint64) (event.Subscription, error) ParseChainRemoved(log types.Log) (*PingPongDemoChainRemoved, error) diff --git a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go index 8065ff8c18..5b3f57c4dc 100644 --- a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go +++ b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var SelfFundedPingPongMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"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\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b50604051620052153803806200521583398101604081905262000034916200059f565b828281818181818181803380600081620000955760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c857620000c8816200017b565b5050506001600160a01b038116620000f3576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200014157620001416001600160a01b0382168360001962000226565b50505050505050508060026200015891906200060e565b600a601d6101000a81548160ff021916908360ff1602179055505050506200070e565b336001600160a01b03821603620001d55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008c565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000278573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029e919062000634565b620002aa91906200064e565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915291925062000306918691906200030c16565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200035b906001600160a01b038516908490620003e2565b805190915015620003dd57808060200190518101906200037c91906200066a565b620003dd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008c565b505050565b6060620003f38484600085620003fb565b949350505050565b6060824710156200045e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008c565b600080866001600160a01b031685876040516200047c9190620006bb565b60006040518083038185875af1925050503d8060008114620004bb576040519150601f19603f3d011682016040523d82523d6000602084013e620004c0565b606091505b509092509050620004d487838387620004df565b979650505050505050565b60608315620005535782516000036200054b576001600160a01b0385163b6200054b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008c565b5081620003f3565b620003f383838151156200056a5781518083602001fd5b8060405162461bcd60e51b81526004016200008c9190620006d9565b6001600160a01b03811681146200059c57600080fd5b50565b600080600060608486031215620005b557600080fd5b8351620005c28162000586565b6020850151909350620005d58162000586565b604085015190925060ff81168114620005ed57600080fd5b809150509250925092565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821602908116908181146200062d576200062d620005f8565b5092915050565b6000602082840312156200064757600080fd5b5051919050565b80820180821115620006645762000664620005f8565b92915050565b6000602082840312156200067d57600080fd5b815180151581146200068e57600080fd5b9392505050565b60005b83811015620006b257818101518382015260200162000698565b50506000910152565b60008251620006cf81846020870162000695565b9190910192915050565b6020815260008251806020840152620006fa81604085016020870162000695565b601f01601f19169190910160400192915050565b614af7806200071e6000396000f3fe60806040526004361061021d5760003560e01c80638462a2b91161011d578063b5a11011116100b0578063e6c725f51161007f578063ef686d8e11610064578063ef686d8e1461073b578063f2fde38b1461075b578063ff2deec31461077b57600080fd5b8063e6c725f5146106e2578063e89b44851461072857600080fd5b8063b5a1101114610659578063bee518a414610679578063cf6730f8146106a2578063e4ca8754146106c257600080fd5b80639d2aede5116100ec5780639d2aede5146105b65780639fe74e26146105d6578063b0f479a1146105f6578063b187bd261461062157600080fd5b80638462a2b91461052b57806385572ffb1461054b5780638da5cb5b1461056b5780638f491cba1461059657600080fd5b806335f170ef116101b05780635e35359e1161017f5780636d62d633116101645780636d62d633146104ad5780636fef519e146104cd57806379ba50971461051657600080fd5b80635e35359e146104605780636939cd971461048057600080fd5b806335f170ef146103c45780634e12498b146103f25780635075a9d414610412578063536c6bfa1461044057600080fd5b8063181f5a77116101ec578063181f5a77146102e15780631892b906146103375780632874d8bf146103575780632b6e5d631461036c57600080fd5b806305bfe982146102295780630e958d6b1461026f57806311e85dff1461029f57806316c38b3c146102c157600080fd5b3661022457005b600080fd5b34801561023557600080fd5b50610259610244366004613955565b60096020526000908152604090205460ff1681565b604051610266919061396e565b60405180910390f35b34801561027b57600080fd5b5061028f61028a3660046139c5565b6107a8565b6040519015158152602001610266565b3480156102ab57600080fd5b506102bf6102ba366004613a6c565b6107f3565b005b3480156102cd57600080fd5b506102bf6102dc366004613a97565b610967565b3480156102ed57600080fd5b5061032a6040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b6040516102669190613b22565b34801561034357600080fd5b506102bf610352366004613b35565b6109c1565b34801561036357600080fd5b506102bf610a04565b34801561037857600080fd5b50600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610266565b3480156103d057600080fd5b506103e46103df366004613b35565b610a40565b604051610266929190613b52565b3480156103fe57600080fd5b506102bf61040d366004613a6c565b610b6c565b34801561041e57600080fd5b5061043261042d366004613955565b610c38565b604051908152602001610266565b34801561044c57600080fd5b506102bf61045b366004613b80565b610c4b565b34801561046c57600080fd5b506102bf61047b366004613bac565b610caf565b34801561048c57600080fd5b506104a061049b366004613955565b610d44565b6040516102669190613c4a565b3480156104b957600080fd5b506102bf6104c8366004613cde565b610f4f565b3480156104d957600080fd5b5061032a6040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b34801561052257600080fd5b506102bf611269565b34801561053757600080fd5b506102bf610546366004613d5a565b611366565b34801561055757600080fd5b506102bf610566366004613dc6565b6116c7565b34801561057757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661039f565b3480156105a257600080fd5b506102bf6105b1366004613955565b6119d4565b3480156105c257600080fd5b506102bf6105d1366004613a6c565b611bb0565b3480156105e257600080fd5b506102bf6105f1366004613e01565b611c6b565b34801561060257600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff1661039f565b34801561062d57600080fd5b50600a547c0100000000000000000000000000000000000000000000000000000000900460ff1661028f565b34801561066557600080fd5b506102bf610674366004613e43565b611feb565b34801561068557600080fd5b50600a5460405167ffffffffffffffff9091168152602001610266565b3480156106ae57600080fd5b506102bf6106bd366004613dc6565b61215b565b3480156106ce57600080fd5b506102bf6106dd366004613955565b612378565b3480156106ee57600080fd5b50600a547d010000000000000000000000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610266565b610432610736366004613fa6565b6125e2565b34801561074757600080fd5b506102bf6107563660046140b3565b612b18565b34801561076757600080fd5b506102bf610776366004613a6c565b612ba9565b34801561078757600080fd5b5060085461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906107d790859085906140d6565b9081526040519081900360200190205460ff1690509392505050565b6107fb612bba565b60085473ffffffffffffffffffffffffffffffffffffffff161561085c5761085c61083b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612c3b565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015610909576109096108c960025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612e3b565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b61096f612bba565b600a80549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6109c9612bba565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b610a0c612bba565b600a80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff169055610a3e6001612f3f565b565b600360205260009081526040902080548190610a5b906140e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a87906140e6565b8015610ad45780601f10610aa957610100808354040283529160200191610ad4565b820191906000526020600020905b815481529060010190602001808311610ab757829003601f168201915b505050505090806001018054610ae9906140e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b15906140e6565b8015610b625780601f10610b3757610100808354040283529160200191610b62565b820191906000526020600020905b815481529060010190602001808311610b4557829003601f168201915b5050505050905082565b610b74612bba565b73ffffffffffffffffffffffffffffffffffffffff8116610bc1576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6000610c4560058361319b565b92915050565b610c53612bba565b610c5d82826131ae565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610cb7612bba565b610cd873ffffffffffffffffffffffffffffffffffffffff84168383613308565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e83604051610d3791815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610db3906140e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddf906140e6565b8015610e2c5780601f10610e0157610100808354040283529160200191610e2c565b820191906000526020600020905b815481529060010190602001808311610e0f57829003601f168201915b50505050508152602001600382018054610e45906140e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e71906140e6565b8015610ebe5780601f10610e9357610100808354040283529160200191610ebe565b820191906000526020600020905b815481529060010190602001808311610ea157829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610f415760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610eec565b505050915250909392505050565b610f57612bba565b6001610f6460058461319b565b14610fa3576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610fb38260025b6005919061335e565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610ffb906140e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611027906140e6565b80156110745780601f1061104957610100808354040283529160200191611074565b820191906000526020600020905b81548152906001019060200180831161105757829003601f168201915b5050505050815260200160038201805461108d906140e6565b80601f01602080910402602001604051908101604052809291908181526020018280546110b9906140e6565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156111895760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611134565b5050505081525050905060005b8160800151518110156112185761121083836080015183815181106111bd576111bd614139565b602002602001015160200151846080015184815181106111df576111df614139565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166133089092919063ffffffff16565b600101611196565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610f9a565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61136e612bba565b60005b81811015611511576003600084848481811061138f5761138f614139565b90506020028101906113a19190614168565b6113af906020810190613b35565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018383838181106113e6576113e6614139565b90506020028101906113f89190614168565b6114069060208101906141a6565b6040516114149291906140d6565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905582828281811061145b5761145b614139565b905060200281019061146d9190614168565b61147b9060208101906141a6565b6040516114899291906140d6565b60405180910390208383838181106114a3576114a3614139565b90506020028101906114b59190614168565b6114c3906020810190613b35565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051611501911515815260200190565b60405180910390a3600101611371565b5060005b838110156116c05760016003600087878581811061153557611535614139565b90506020028101906115479190614168565b611555906020810190613b35565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061158c5761158c614139565b905060200281019061159e9190614168565b6115ac9060208101906141a6565b6040516115ba9291906140d6565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061160a5761160a614139565b905060200281019061161c9190614168565b61162a9060208101906141a6565b6040516116389291906140d6565b604051809103902085858381811061165257611652614139565b90506020028101906116649190614168565b611672906020810190613b35565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb908160016040516116b0911515815260200190565b60405180910390a3600101611515565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461171a576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610f9a565b61172a6040820160208301613b35565b61173760408301836141a6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600360205260409020805490935061178e925090506140e6565b159050806117e45750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516117cf919061420b565b9081526040519081900360200190205460ff16155b1561181d57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610f9a9190613b22565b61182d6040840160208501613b35565b67ffffffffffffffff8116600090815260036020526040902080548190611853906140e6565b905060000361189a576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610f9a565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906118d690889060040161431f565b600060405180830381600087803b1580156118f057600080fd5b505af1925050508015611901575060015b6119a1573d80801561192f576040519150601f19603f3d011682016040523d82523d6000602084013e611934565b606091505b5061194186356001610faa565b5085356000908152600460205260409020869061195e82826146f1565b50506040518635907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f90611993908490613b22565b60405180910390a2506116c0565b6040518535907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050505050565b600a547d010000000000000000000000000000000000000000000000000000000000900460ff161580611a2c5750600a547d010000000000000000000000000000000000000000000000000000000000900460ff1681105b15611a345750565b600a54600190611a68907d010000000000000000000000000000000000000000000000000000000000900460ff16836147eb565b11611bad5760025473ffffffffffffffffffffffffffffffffffffffff16600a546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190614826565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b6b57600080fd5b505af1158015611b7f573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a15b50565b611bb8612bba565b600a80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152600a5467ffffffffffffffff16600090815260036020522090611c679082614843565b5050565b611c73612bba565b60005b81811015611fe657828282818110611c9057611c90614139565b9050602002810190611ca2919061495d565b611cb3906040810190602001613a97565b611d865760036000848484818110611ccd57611ccd614139565b9050602002810190611cdf919061495d565b611ced906020810190613b35565b67ffffffffffffffff16815260208101919091526040016000908120611d1291613907565b7f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916838383818110611d4557611d45614139565b9050602002810190611d57919061495d565b611d65906020810190613b35565b60405167ffffffffffffffff909116815260200160405180910390a1611fde565b828282818110611d9857611d98614139565b9050602002810190611daa919061495d565b611db89060408101906141a6565b9050600003611df3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858585818110611e0b57611e0b614139565b9050602002810190611e1d919061495d565b611e2b906020810190613b35565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611e6157611e61614139565b9050602002810190611e73919061495d565b611e819060408101906141a6565b8291611e8e919083614475565b50838383818110611ea157611ea1614139565b9050602002810190611eb3919061495d565b611ec19060608101906141a6565b159050611f0c57838383818110611eda57611eda614139565b9050602002810190611eec919061495d565b611efa9060608101906141a6565b6001830191611f0a919083614475565b505b7f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212848484818110611f3f57611f3f614139565b9050602002810190611f51919061495d565b611f5f906020810190613b35565b858585818110611f7157611f71614139565b9050602002810190611f83919061495d565b611f919060408101906141a6565b878787818110611fa357611fa3614139565b9050602002810190611fb5919061495d565b611fc39060608101906141a6565b604051611fd4959493929190614991565b60405180910390a1505b600101611c76565b505050565b611ff3612bba565b600a805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600360209081526040918290208251918201939093526001926002019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120ae9161420b565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff8416600090815260036020522090611fe69082614843565b333014612194576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121a46040820160208301613b35565b6121b160408301836141a6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526003602052604090208054909350612208925090506140e6565b1590508061225e5750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051612249919061420b565b9081526040519081900360200190205460ff16155b1561229757806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610f9a9190613b22565b6122a76040840160208501613b35565b67ffffffffffffffff81166000908152600360205260409020805481906122cd906140e6565b9050600003612314576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610f9a565b600061232360608701876141a6565b8101906123309190613955565b600a549091507c0100000000000000000000000000000000000000000000000000000000900460ff166123705761237061236b8260016149d4565b612f3f565b505050505050565b600161238560058361319b565b146123bf576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610f9a565b6123ca816000610faa565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191612412906140e6565b80601f016020809104026020016040519081016040528092919081815260200182805461243e906140e6565b801561248b5780601f106124605761010080835404028352916020019161248b565b820191906000526020600020905b81548152906001019060200180831161246e57829003601f168201915b505050505081526020016003820180546124a4906140e6565b80601f01602080910402602001604051908101604052809291908181526020018280546124d0906140e6565b801561251d5780601f106124f25761010080835404028352916020019161251d565b820191906000526020600020905b81548152906001019060200180831161250057829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156125a05760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff16825260019081015482840152908352909201910161254b565b505050508152505090506125b381613373565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff831660009081526003602052604081208054859190819061260b906140e6565b9050600003612652576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610f9a565b6040805160a08101825267ffffffffffffffff8816600090815260036020529182208054829190612682906140e6565b80601f01602080910402602001604051908101604052809291908181526020018280546126ae906140e6565b80156126fb5780601f106126d0576101008083540402835291602001916126fb565b820191906000526020600020905b8154815290600101906020018083116126de57829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b16600090815260039092529020600101805460809092019161275c906140e6565b80601f0160208091040260200160405190810160405280929190818152602001828054612788906140e6565b80156127d55780601f106127aa576101008083540402835291602001916127d5565b820191906000526020600020905b8154815290600101906020018083116127b857829003601f168201915b5050505050815250905060005b865181101561293257612852333089848151811061280257612802614139565b6020026020010151602001518a858151811061282057612820614139565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1661337b909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff9091169088908390811061288257612882614139565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161461292a57600254875161292a9173ffffffffffffffffffffffffffffffffffffffff16908990849081106128db576128db614139565b6020026020010151602001518984815181106128f9576128f9614139565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612c3b9092919063ffffffff16565b6001016127e2565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded9061298c908b9086906004016149e7565b602060405180830381865afa1580156129a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cd9190614ab4565b60085490915073ffffffffffffffffffffffffffffffffffffffff1615612a1357600854612a139073ffffffffffffffffffffffffffffffffffffffff1633308461337b565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612a45576000612a47565b825b8a856040518463ffffffff1660e01b8152600401612a669291906149e7565b60206040518083038185885af1158015612a84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612aa99190614ab4565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b612b20612bba565b600a80547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b612bb1612bba565b611bad816133d9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610f9a565b801580612cdb57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd99190614ab4565b155b612d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610f9a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611fe69084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526134ce565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614ab4565b612ee091906149d4565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150612f399085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612db9565b50505050565b80600116600103612f82576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612fb6565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b612fbf816119d4565b6040805160a08101909152600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e0810160405160208183030381529060405281526020018360405160200161302391815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528152602001600060405190808252806020026020018201604052801561309d57816020015b60408051808201909152600080825260208201528152602001906001900390816130765790505b50815260085473ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080519182018152600082529091015290506130f460025473ffffffffffffffffffffffffffffffffffffffff1690565b600a546040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216916396f4e9f9916131589167ffffffffffffffff9091169085906004016149e7565b6020604051808303816000875af1158015613177573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe69190614ab4565b60006131a783836135da565b9392505050565b80471015613218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610f9a565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613272576040519150601f19603f3d011682016040523d82523d6000602084013e613277565b606091505b5050905080611fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f9a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611fe69084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612db9565b600061336b848484613664565b949350505050565b611bad612bba565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612f399085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612db9565b3373ffffffffffffffffffffffffffffffffffffffff821603613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610f9a565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000613530826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166136819092919063ffffffff16565b805190915015611fe6578080602001905181019061354e9190614acd565b611fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f9a565b6000818152600283016020526040812054801515806135fe57506135fe8484613690565b6131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610f9a565b6000828152600284016020526040812082905561336b848461369c565b606061336b84846000856136a8565b60006131a783836137c1565b60006131a783836137d9565b60608247101561373a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f9a565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613763919061420b565b60006040518083038185875af1925050503d80600081146137a0576040519150601f19603f3d011682016040523d82523d6000602084013e6137a5565b606091505b50915091506137b687838387613828565b979650505050505050565b600081815260018301602052604081205415156131a7565b600081815260018301602052604081205461382057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c45565b506000610c45565b606083156138be5782516000036138b75773ffffffffffffffffffffffffffffffffffffffff85163b6138b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f9a565b508161336b565b61336b83838151156138d35781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a9190613b22565b508054613913906140e6565b6000825580601f10613923575050565b601f016020900490600052602060002090810190611bad91905b80821115613951576000815560010161393d565b5090565b60006020828403121561396757600080fd5b5035919050565b60208101600383106139a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff81168114611bad57600080fd5b6000806000604084860312156139da57600080fd5b83356139e5816139af565b9250602084013567ffffffffffffffff80821115613a0257600080fd5b818601915086601f830112613a1657600080fd5b813581811115613a2557600080fd5b876020828501011115613a3757600080fd5b6020830194508093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114611bad57600080fd5b600060208284031215613a7e57600080fd5b81356131a781613a4a565b8015158114611bad57600080fd5b600060208284031215613aa957600080fd5b81356131a781613a89565b60005b83811015613acf578181015183820152602001613ab7565b50506000910152565b60008151808452613af0816020860160208601613ab4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006131a76020830184613ad8565b600060208284031215613b4757600080fd5b81356131a7816139af565b604081526000613b656040830185613ad8565b8281036020840152613b778185613ad8565b95945050505050565b60008060408385031215613b9357600080fd5b8235613b9e81613a4a565b946020939093013593505050565b600080600060608486031215613bc157600080fd5b8335613bcc81613a4a565b92506020840135613bdc81613a4a565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015613c3f578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613c02565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a06060840152613c8460c0840182613ad8565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152613cc08383613ad8565b925060808601519150808584030160a086015250613b778282613bed565b60008060408385031215613cf157600080fd5b823591506020830135613d0381613a4a565b809150509250929050565b60008083601f840112613d2057600080fd5b50813567ffffffffffffffff811115613d3857600080fd5b6020830191508360208260051b8501011115613d5357600080fd5b9250929050565b60008060008060408587031215613d7057600080fd5b843567ffffffffffffffff80821115613d8857600080fd5b613d9488838901613d0e565b90965094506020870135915080821115613dad57600080fd5b50613dba87828801613d0e565b95989497509550505050565b600060208284031215613dd857600080fd5b813567ffffffffffffffff811115613def57600080fd5b820160a081850312156131a757600080fd5b60008060208385031215613e1457600080fd5b823567ffffffffffffffff811115613e2b57600080fd5b613e3785828601613d0e565b90969095509350505050565b60008060408385031215613e5657600080fd5b8235613e61816139af565b91506020830135613d0381613a4a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613ec357613ec3613e71565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613f1057613f10613e71565b604052919050565b600082601f830112613f2957600080fd5b813567ffffffffffffffff811115613f4357613f43613e71565b613f7460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613ec9565b818152846020838601011115613f8957600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613fbb57600080fd5b8335613fc6816139af565b925060208481013567ffffffffffffffff80821115613fe457600080fd5b818701915087601f830112613ff857600080fd5b81358181111561400a5761400a613e71565b614018848260051b01613ec9565b81815260069190911b8301840190848101908a83111561403757600080fd5b938501935b82851015614083576040858c0312156140555760008081fd5b61405d613ea0565b853561406881613a4a565b8152858701358782015282526040909401939085019061403c565b96505050604087013592508083111561409b57600080fd5b50506140a986828701613f18565b9150509250925092565b6000602082840312156140c557600080fd5b813560ff811681146131a757600080fd5b8183823760009101908152919050565b600181811c908216806140fa57607f821691505b602082108103614133577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261419c57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126141db57600080fd5b83018035915067ffffffffffffffff8211156141f657600080fd5b602001915036819003821315613d5357600080fd5b6000825161419c818460208701613ab4565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261425257600080fd5b830160208101925035905067ffffffffffffffff81111561427257600080fd5b803603821315613d5357600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015613c3f5781356142ed81613a4a565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016142da565b60208152813560208201526000602083013561433a816139af565b67ffffffffffffffff8082166040850152614358604086018661421d565b925060a0606086015261436f60c086018483614281565b92505061437f606086018661421d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526143b5858385614281565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126143ee57600080fd5b6020928801928301923591508382111561440757600080fd5b8160061b360383131561441957600080fd5b8685030160a08701526137b68482846142ca565b601f821115611fe6576000816000526020600020601f850160051c810160208610156144565750805b601f850160051c820191505b8181101561237057828155600101614462565b67ffffffffffffffff83111561448d5761448d613e71565b6144a18361449b83546140e6565b8361442d565b6000601f8411600181146144f357600085156144bd5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556116c0565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156145425786850135825560209485019460019092019101614522565b508682101561457d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81356145c981613a4a565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561462f5761462f613e71565b8054838255808410156146bc5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146146705761467061458f565b80861686146146815761468161458f565b5060008360005260206000208360011b81018760011b820191505b808210156146b757828255828483015560028201915061469c565b505050505b5060008181526020812083915b85811015612370576146db83836145be565b60409290920191600291909101906001016146c9565b81358155600181016020830135614707816139af565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000084541617835561474760408601866141a6565b93509150614759838360028701614475565b61476660608601866141a6565b93509150614778838360038701614475565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030183126147af57600080fd5b9184019182359150808211156147c457600080fd5b506020820191508060061b36038213156147dd57600080fd5b612f39818360048601614616565b600082614821577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561483857600080fd5b81516131a781613a4a565b815167ffffffffffffffff81111561485d5761485d613e71565b6148718161486b84546140e6565b8461442d565b602080601f8311600181146148c4576000841561488e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612370565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614911578886015182559484019460019091019084016148f2565b508582101561494d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261419c57600080fd5b67ffffffffffffffff861681526060602082015260006149b5606083018688614281565b82810360408401526149c8818587614281565b98975050505050505050565b80820180821115610c4557610c4561458f565b67ffffffffffffffff83168152604060208201526000825160a06040840152614a1360e0840182613ad8565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152614a4f8383613ad8565b92506040860151915080858403016080860152614a6c8383613bed565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250614aaa8282613ad8565b9695505050505050565b600060208284031215614ac657600080fd5b5051919050565b600060208284031215614adf57600080fd5b81516131a781613a8956fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isBeingApproved\",\"type\":\"bool\"}],\"name\":\"ApprovedSenderModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"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\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"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\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"modifyRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"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\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b50604051620051fc380380620051fc83398101604081905262000034916200059f565b828281818181818181803380600081620000955760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c857620000c8816200017b565b5050506001600160a01b038116620000f3576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200014157620001416001600160a01b0382168360001962000226565b50505050505050508060026200015891906200060e565b600a601d6101000a81548160ff021916908360ff1602179055505050506200070e565b336001600160a01b03821603620001d55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008c565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000278573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029e919062000634565b620002aa91906200064e565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915291925062000306918691906200030c16565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200035b906001600160a01b038516908490620003e2565b805190915015620003dd57808060200190518101906200037c91906200066a565b620003dd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008c565b505050565b6060620003f38484600085620003fb565b949350505050565b6060824710156200045e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008c565b600080866001600160a01b031685876040516200047c9190620006bb565b60006040518083038185875af1925050503d8060008114620004bb576040519150601f19603f3d011682016040523d82523d6000602084013e620004c0565b606091505b509092509050620004d487838387620004df565b979650505050505050565b60608315620005535782516000036200054b576001600160a01b0385163b6200054b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008c565b5081620003f3565b620003f383838151156200056a5781518083602001fd5b8060405162461bcd60e51b81526004016200008c9190620006d9565b6001600160a01b03811681146200059c57600080fd5b50565b600080600060608486031215620005b557600080fd5b8351620005c28162000586565b6020850151909350620005d58162000586565b604085015190925060ff81168114620005ed57600080fd5b809150509250925092565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821602908116908181146200062d576200062d620005f8565b5092915050565b6000602082840312156200064757600080fd5b5051919050565b80820180821115620006645762000664620005f8565b92915050565b6000602082840312156200067d57600080fd5b815180151581146200068e57600080fd5b9392505050565b60005b83811015620006b257818101518382015260200162000698565b50506000910152565b60008251620006cf81846020870162000695565b9190910192915050565b6020815260008251806020840152620006fa81604085016020870162000695565b601f01601f19169190910160400192915050565b614ade806200071e6000396000f3fe60806040526004361061021d5760003560e01c80638462a2b91161011d578063b5a11011116100b0578063e6c725f51161007f578063ef686d8e11610064578063ef686d8e1461073b578063f2fde38b1461075b578063ff2deec31461077b57600080fd5b8063e6c725f5146106e2578063e89b44851461072857600080fd5b8063b5a1101114610659578063bee518a414610679578063cf6730f8146106a2578063e4ca8754146106c257600080fd5b80639d2aede5116100ec5780639d2aede5146105b65780639fe74e26146105d6578063b0f479a1146105f6578063b187bd261461062157600080fd5b80638462a2b91461052b57806385572ffb1461054b5780638da5cb5b1461056b5780638f491cba1461059657600080fd5b806335f170ef116101b05780635e35359e1161017f5780636d62d633116101645780636d62d633146104ad5780636fef519e146104cd57806379ba50971461051657600080fd5b80635e35359e146104605780636939cd971461048057600080fd5b806335f170ef146103c45780634e12498b146103f25780635075a9d414610412578063536c6bfa1461044057600080fd5b8063181f5a77116101ec578063181f5a77146102e15780631892b906146103375780632874d8bf146103575780632b6e5d631461036c57600080fd5b806305bfe982146102295780630e958d6b1461026f57806311e85dff1461029f57806316c38b3c146102c157600080fd5b3661022457005b600080fd5b34801561023557600080fd5b5061025961024436600461396b565b60096020526000908152604090205460ff1681565b6040516102669190613984565b60405180910390f35b34801561027b57600080fd5b5061028f61028a3660046139db565b6107a8565b6040519015158152602001610266565b3480156102ab57600080fd5b506102bf6102ba366004613a82565b6107f3565b005b3480156102cd57600080fd5b506102bf6102dc366004613aad565b610967565b3480156102ed57600080fd5b5061032a6040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b6040516102669190613b38565b34801561034357600080fd5b506102bf610352366004613b4b565b6109c1565b34801561036357600080fd5b506102bf610a04565b34801561037857600080fd5b50600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610266565b3480156103d057600080fd5b506103e46103df366004613b4b565b610a40565b604051610266929190613b68565b3480156103fe57600080fd5b506102bf61040d366004613a82565b610b6c565b34801561041e57600080fd5b5061043261042d36600461396b565b610c38565b604051908152602001610266565b34801561044c57600080fd5b506102bf61045b366004613b96565b610c4b565b34801561046c57600080fd5b506102bf61047b366004613bc2565b610caf565b34801561048c57600080fd5b506104a061049b36600461396b565b610d44565b6040516102669190613c60565b3480156104b957600080fd5b506102bf6104c8366004613cf4565b610f4f565b3480156104d957600080fd5b5061032a6040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b34801561052257600080fd5b506102bf611269565b34801561053757600080fd5b506102bf610546366004613d70565b611366565b34801561055757600080fd5b506102bf610566366004613ddc565b6116c7565b34801561057757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661039f565b3480156105a257600080fd5b506102bf6105b136600461396b565b6119d4565b3480156105c257600080fd5b506102bf6105d1366004613a82565b611bb0565b3480156105e257600080fd5b506102bf6105f1366004613e17565b611c6b565b34801561060257600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff1661039f565b34801561062d57600080fd5b50600a547c0100000000000000000000000000000000000000000000000000000000900460ff1661028f565b34801561066557600080fd5b506102bf610674366004613e59565b612001565b34801561068557600080fd5b50600a5460405167ffffffffffffffff9091168152602001610266565b3480156106ae57600080fd5b506102bf6106bd366004613ddc565b612171565b3480156106ce57600080fd5b506102bf6106dd36600461396b565b61238e565b3480156106ee57600080fd5b50600a547d010000000000000000000000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610266565b610432610736366004613fbc565b6125f8565b34801561074757600080fd5b506102bf6107563660046140c9565b612b2e565b34801561076757600080fd5b506102bf610776366004613a82565b612bbf565b34801561078757600080fd5b5060085461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906107d790859085906140ec565b9081526040519081900360200190205460ff1690509392505050565b6107fb612bd0565b60085473ffffffffffffffffffffffffffffffffffffffff161561085c5761085c61083b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612c51565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015610909576109096108c960025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612e51565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b61096f612bd0565b600a80549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6109c9612bd0565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b610a0c612bd0565b600a80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff169055610a3e6001612f55565b565b600360205260009081526040902080548190610a5b906140fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a87906140fc565b8015610ad45780601f10610aa957610100808354040283529160200191610ad4565b820191906000526020600020905b815481529060010190602001808311610ab757829003601f168201915b505050505090806001018054610ae9906140fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b15906140fc565b8015610b625780601f10610b3757610100808354040283529160200191610b62565b820191906000526020600020905b815481529060010190602001808311610b4557829003601f168201915b5050505050905082565b610b74612bd0565b73ffffffffffffffffffffffffffffffffffffffff8116610bc1576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6000610c456005836131b1565b92915050565b610c53612bd0565b610c5d82826131c4565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610cb7612bd0565b610cd873ffffffffffffffffffffffffffffffffffffffff8416838361331e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e83604051610d3791815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610db3906140fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddf906140fc565b8015610e2c5780601f10610e0157610100808354040283529160200191610e2c565b820191906000526020600020905b815481529060010190602001808311610e0f57829003601f168201915b50505050508152602001600382018054610e45906140fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610e71906140fc565b8015610ebe5780601f10610e9357610100808354040283529160200191610ebe565b820191906000526020600020905b815481529060010190602001808311610ea157829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610f415760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610eec565b505050915250909392505050565b610f57612bd0565b6001610f646005846131b1565b14610fa3576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610fb38260025b60059190613374565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610ffb906140fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611027906140fc565b80156110745780601f1061104957610100808354040283529160200191611074565b820191906000526020600020905b81548152906001019060200180831161105757829003601f168201915b5050505050815260200160038201805461108d906140fc565b80601f01602080910402602001604051908101604052809291908181526020018280546110b9906140fc565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156111895760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611134565b5050505081525050905060005b8160800151518110156112185761121083836080015183815181106111bd576111bd61414f565b602002602001015160200151846080015184815181106111df576111df61414f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1661331e9092919063ffffffff16565b600101611196565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610f9a565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61136e612bd0565b60005b81811015611511576003600084848481811061138f5761138f61414f565b90506020028101906113a1919061417e565b6113af906020810190613b4b565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018383838181106113e6576113e661414f565b90506020028101906113f8919061417e565b6114069060208101906141bc565b6040516114149291906140ec565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905582828281811061145b5761145b61414f565b905060200281019061146d919061417e565b61147b9060208101906141bc565b6040516114899291906140ec565b60405180910390208383838181106114a3576114a361414f565b90506020028101906114b5919061417e565b6114c3906020810190613b4b565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb90816000604051611501911515815260200190565b60405180910390a3600101611371565b5060005b838110156116c0576001600360008787858181106115355761153561414f565b9050602002810190611547919061417e565b611555906020810190613b4b565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061158c5761158c61414f565b905060200281019061159e919061417e565b6115ac9060208101906141bc565b6040516115ba9291906140ec565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061160a5761160a61414f565b905060200281019061161c919061417e565b61162a9060208101906141bc565b6040516116389291906140ec565b60405180910390208585838181106116525761165261414f565b9050602002810190611664919061417e565b611672906020810190613b4b565b67ffffffffffffffff167f8b7bd63124894be95396727f5b0df205ee011641e77fdab67e084f997ceb908160016040516116b0911515815260200190565b60405180910390a3600101611515565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461171a576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610f9a565b61172a6040820160208301613b4b565b61173760408301836141bc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600360205260409020805490935061178e925090506140fc565b159050806117e45750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516117cf9190614221565b9081526040519081900360200190205460ff16155b1561181d57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610f9a9190613b38565b61182d6040840160208501613b4b565b67ffffffffffffffff8116600090815260036020526040902080548190611853906140fc565b905060000361189a576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610f9a565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906118d6908890600401614335565b600060405180830381600087803b1580156118f057600080fd5b505af1925050508015611901575060015b6119a1573d80801561192f576040519150601f19603f3d011682016040523d82523d6000602084013e611934565b606091505b5061194186356001610faa565b5085356000908152600460205260409020869061195e8282614707565b50506040518635907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f90611993908490613b38565b60405180910390a2506116c0565b6040518535907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050505050565b600a547d010000000000000000000000000000000000000000000000000000000000900460ff161580611a2c5750600a547d010000000000000000000000000000000000000000000000000000000000900460ff1681105b15611a345750565b600a54600190611a68907d010000000000000000000000000000000000000000000000000000000000900460ff1683614801565b11611bad5760025473ffffffffffffffffffffffffffffffffffffffff16600a546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b24919061483c565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b6b57600080fd5b505af1158015611b7f573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a15b50565b611bb8612bd0565b600a80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152600a5467ffffffffffffffff16600090815260036020522090611c679082614859565b5050565b611c73612bd0565b60005b81811015611ffc57828282818110611c9057611c9061414f565b9050602002810190611ca29190614973565b611cb3906040810190602001613aad565b611d7f5760036000848484818110611ccd57611ccd61414f565b9050602002810190611cdf9190614973565b611ced906020810190613b4b565b67ffffffffffffffff16815260208101919091526040016000908120611d129161391d565b828282818110611d2457611d2461414f565b9050602002810190611d369190614973565b611d44906020810190613b4b565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a2611ff4565b828282818110611d9157611d9161414f565b9050602002810190611da39190614973565b611db19060408101906141bc565b9050600003611dec576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858585818110611e0457611e0461414f565b9050602002810190611e169190614973565b611e24906020810190613b4b565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611e5a57611e5a61414f565b9050602002810190611e6c9190614973565b611e7a9060408101906141bc565b8291611e8791908361448b565b50838383818110611e9a57611e9a61414f565b9050602002810190611eac9190614973565b611eba9060608101906141bc565b159050611f0557838383818110611ed357611ed361414f565b9050602002810190611ee59190614973565b611ef39060608101906141bc565b6001830191611f0391908361448b565b505b838383818110611f1757611f1761414f565b9050602002810190611f299190614973565b611f379060408101906141bc565b604051611f459291906140ec565b6040518091039020848484818110611f5f57611f5f61414f565b9050602002810190611f719190614973565b611f7f906020810190613b4b565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212868686818110611fbc57611fbc61414f565b9050602002810190611fce9190614973565b611fdc9060608101906141bc565b604051611fea9291906149a7565b60405180910390a3505b600101611c76565b505050565b612009612bd0565b600a805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600360209081526040918290208251918201939093526001926002019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120c491614221565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff8416600090815260036020522090611ffc9082614859565b3330146121aa576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121ba6040820160208301613b4b565b6121c760408301836141bc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600360205260409020805490935061221e925090506140fc565b159050806122745750600360008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018160405161225f9190614221565b9081526040519081900360200190205460ff16155b156122ad57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610f9a9190613b38565b6122bd6040840160208501613b4b565b67ffffffffffffffff81166000908152600360205260409020805481906122e3906140fc565b905060000361232a576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610f9a565b600061233960608701876141bc565b810190612346919061396b565b600a549091507c0100000000000000000000000000000000000000000000000000000000900460ff16612386576123866123818260016149bb565b612f55565b505050505050565b600161239b6005836131b1565b146123d5576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610f9a565b6123e0816000610faa565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191612428906140fc565b80601f0160208091040260200160405190810160405280929190818152602001828054612454906140fc565b80156124a15780601f10612476576101008083540402835291602001916124a1565b820191906000526020600020905b81548152906001019060200180831161248457829003601f168201915b505050505081526020016003820180546124ba906140fc565b80601f01602080910402602001604051908101604052809291908181526020018280546124e6906140fc565b80156125335780601f1061250857610100808354040283529160200191612533565b820191906000526020600020905b81548152906001019060200180831161251657829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156125b65760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101612561565b505050508152505090506125c981613389565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff8316600090815260036020526040812080548591908190612621906140fc565b9050600003612668576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610f9a565b6040805160a08101825267ffffffffffffffff8816600090815260036020529182208054829190612698906140fc565b80601f01602080910402602001604051908101604052809291908181526020018280546126c4906140fc565b80156127115780601f106126e657610100808354040283529160200191612711565b820191906000526020600020905b8154815290600101906020018083116126f457829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b166000908152600390925290206001018054608090920191612772906140fc565b80601f016020809104026020016040519081016040528092919081815260200182805461279e906140fc565b80156127eb5780601f106127c0576101008083540402835291602001916127eb565b820191906000526020600020905b8154815290600101906020018083116127ce57829003601f168201915b5050505050815250905060005b86518110156129485761286833308984815181106128185761281861414f565b6020026020010151602001518a85815181106128365761283661414f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16613391909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff909116908890839081106128985761289861414f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146129405760025487516129409173ffffffffffffffffffffffffffffffffffffffff16908990849081106128f1576128f161414f565b60200260200101516020015189848151811061290f5761290f61414f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612c519092919063ffffffff16565b6001016127f8565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded906129a2908b9086906004016149ce565b602060405180830381865afa1580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e39190614a9b565b60085490915073ffffffffffffffffffffffffffffffffffffffff1615612a2957600854612a299073ffffffffffffffffffffffffffffffffffffffff16333084613391565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612a5b576000612a5d565b825b8a856040518463ffffffff1660e01b8152600401612a7c9291906149ce565b60206040518083038185885af1158015612a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612abf9190614a9b565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b612b36612bd0565b600a80547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b612bc7612bd0565b611bad816133ef565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610f9a565b801580612cf157506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cef9190614a9b565b155b612d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610f9a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611ffc9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526134e4565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eec9190614a9b565b612ef691906149bb565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150612f4f9085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612dcf565b50505050565b80600116600103612f98576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612fcc565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b612fd5816119d4565b6040805160a08101909152600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e0810160405160208183030381529060405281526020018360405160200161303991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052815260200160006040519080825280602002602001820160405280156130b357816020015b604080518082019091526000808252602082015281526020019060019003908161308c5790505b50815260085473ffffffffffffffffffffffffffffffffffffffff166020808301919091526040805191820181526000825290910152905061310a60025473ffffffffffffffffffffffffffffffffffffffff1690565b600a546040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216916396f4e9f99161316e9167ffffffffffffffff9091169085906004016149ce565b6020604051808303816000875af115801561318d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffc9190614a9b565b60006131bd83836135f0565b9392505050565b8047101561322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610f9a565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613288576040519150601f19603f3d011682016040523d82523d6000602084013e61328d565b606091505b5050905080611ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f9a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611ffc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612dcf565b600061338184848461367a565b949350505050565b611bad612bd0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612f4f9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612dcf565b3373ffffffffffffffffffffffffffffffffffffffff82160361346e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610f9a565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000613546826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166136979092919063ffffffff16565b805190915015611ffc57808060200190518101906135649190614ab4565b611ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f9a565b600081815260028301602052604081205480151580613614575061361484846136a6565b6131bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610f9a565b6000828152600284016020526040812082905561338184846136b2565b606061338184846000856136be565b60006131bd83836137d7565b60006131bd83836137ef565b606082471015613750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f9a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516137799190614221565b60006040518083038185875af1925050503d80600081146137b6576040519150601f19603f3d011682016040523d82523d6000602084013e6137bb565b606091505b50915091506137cc8783838761383e565b979650505050505050565b600081815260018301602052604081205415156131bd565b600081815260018301602052604081205461383657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c45565b506000610c45565b606083156138d45782516000036138cd5773ffffffffffffffffffffffffffffffffffffffff85163b6138cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f9a565b5081613381565b61338183838151156138e95781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a9190613b38565b508054613929906140fc565b6000825580601f10613939575050565b601f016020900490600052602060002090810190611bad91905b808211156139675760008155600101613953565b5090565b60006020828403121561397d57600080fd5b5035919050565b60208101600383106139bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff81168114611bad57600080fd5b6000806000604084860312156139f057600080fd5b83356139fb816139c5565b9250602084013567ffffffffffffffff80821115613a1857600080fd5b818601915086601f830112613a2c57600080fd5b813581811115613a3b57600080fd5b876020828501011115613a4d57600080fd5b6020830194508093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114611bad57600080fd5b600060208284031215613a9457600080fd5b81356131bd81613a60565b8015158114611bad57600080fd5b600060208284031215613abf57600080fd5b81356131bd81613a9f565b60005b83811015613ae5578181015183820152602001613acd565b50506000910152565b60008151808452613b06816020860160208601613aca565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006131bd6020830184613aee565b600060208284031215613b5d57600080fd5b81356131bd816139c5565b604081526000613b7b6040830185613aee565b8281036020840152613b8d8185613aee565b95945050505050565b60008060408385031215613ba957600080fd5b8235613bb481613a60565b946020939093013593505050565b600080600060608486031215613bd757600080fd5b8335613be281613a60565b92506020840135613bf281613a60565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015613c55578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613c18565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a06060840152613c9a60c0840182613aee565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152613cd68383613aee565b925060808601519150808584030160a086015250613b8d8282613c03565b60008060408385031215613d0757600080fd5b823591506020830135613d1981613a60565b809150509250929050565b60008083601f840112613d3657600080fd5b50813567ffffffffffffffff811115613d4e57600080fd5b6020830191508360208260051b8501011115613d6957600080fd5b9250929050565b60008060008060408587031215613d8657600080fd5b843567ffffffffffffffff80821115613d9e57600080fd5b613daa88838901613d24565b90965094506020870135915080821115613dc357600080fd5b50613dd087828801613d24565b95989497509550505050565b600060208284031215613dee57600080fd5b813567ffffffffffffffff811115613e0557600080fd5b820160a081850312156131bd57600080fd5b60008060208385031215613e2a57600080fd5b823567ffffffffffffffff811115613e4157600080fd5b613e4d85828601613d24565b90969095509350505050565b60008060408385031215613e6c57600080fd5b8235613e77816139c5565b91506020830135613d1981613a60565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613ed957613ed9613e87565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613f2657613f26613e87565b604052919050565b600082601f830112613f3f57600080fd5b813567ffffffffffffffff811115613f5957613f59613e87565b613f8a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613edf565b818152846020838601011115613f9f57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613fd157600080fd5b8335613fdc816139c5565b925060208481013567ffffffffffffffff80821115613ffa57600080fd5b818701915087601f83011261400e57600080fd5b81358181111561402057614020613e87565b61402e848260051b01613edf565b81815260069190911b8301840190848101908a83111561404d57600080fd5b938501935b82851015614099576040858c03121561406b5760008081fd5b614073613eb6565b853561407e81613a60565b81528587013587820152825260409094019390850190614052565b9650505060408701359250808311156140b157600080fd5b50506140bf86828701613f2e565b9150509250925092565b6000602082840312156140db57600080fd5b813560ff811681146131bd57600080fd5b8183823760009101908152919050565b600181811c9082168061411057607f821691505b602082108103614149577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126141b257600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126141f157600080fd5b83018035915067ffffffffffffffff82111561420c57600080fd5b602001915036819003821315613d6957600080fd5b600082516141b2818460208701613aca565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261426857600080fd5b830160208101925035905067ffffffffffffffff81111561428857600080fd5b803603821315613d6957600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015613c5557813561430381613a60565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016142f0565b602081528135602082015260006020830135614350816139c5565b67ffffffffffffffff808216604085015261436e6040860186614233565b925060a0606086015261438560c086018483614297565b9250506143956060860186614233565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526143cb858385614297565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261440457600080fd5b6020928801928301923591508382111561441d57600080fd5b8160061b360383131561442f57600080fd5b8685030160a08701526137cc8482846142e0565b601f821115611ffc576000816000526020600020601f850160051c8101602086101561446c5750805b601f850160051c820191505b8181101561238657828155600101614478565b67ffffffffffffffff8311156144a3576144a3613e87565b6144b7836144b183546140fc565b83614443565b6000601f84116001811461450957600085156144d35750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556116c0565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156145585786850135825560209485019460019092019101614538565b5086821015614593577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81356145df81613a60565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561464557614645613e87565b8054838255808410156146d25760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168314614686576146866145a5565b8086168614614697576146976145a5565b5060008360005260206000208360011b81018760011b820191505b808210156146cd5782825582848301556002820191506146b2565b505050505b5060008181526020812083915b85811015612386576146f183836145d4565b60409290920191600291909101906001016146df565b8135815560018101602083013561471d816139c5565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000084541617835561475d60408601866141bc565b9350915061476f83836002870161448b565b61477c60608601866141bc565b9350915061478e83836003870161448b565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030183126147c557600080fd5b9184019182359150808211156147da57600080fd5b506020820191508060061b36038213156147f357600080fd5b612f4f81836004860161462c565b600082614837577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561484e57600080fd5b81516131bd81613a60565b815167ffffffffffffffff81111561487357614873613e87565b6148878161488184546140fc565b84614443565b602080601f8311600181146148da57600084156148a45750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612386565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561492757888601518255948401946001909101908401614908565b508582101561496357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126141b257600080fd5b602081526000613381602083018486614297565b80820180821115610c4557610c456145a5565b67ffffffffffffffff83168152604060208201526000825160a060408401526149fa60e0840182613aee565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152614a368383613aee565b92506040860151915080858403016080860152614a538383613c03565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250614a918282613aee565b9695505050505050565b600060208284031215614aad57600080fd5b5051919050565b600060208284031215614ac657600080fd5b81516131bd81613a9f56fea164736f6c6343000818000a", } var SelfFundedPingPongABI = SelfFundedPingPongMetaData.ABI @@ -1099,23 +1099,41 @@ func (it *SelfFundedPingPongChainAddedIterator) Close() error { type SelfFundedPingPongChainAdded struct { RemoteChainSelector uint64 - Recipient []byte + Recipient common.Hash ExtraArgsBytes []byte Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterChainAdded(opts *bind.FilterOpts) (*SelfFundedPingPongChainAddedIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*SelfFundedPingPongChainAddedIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "ChainAdded") + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } return &SelfFundedPingPongChainAddedIterator{contract: _SelfFundedPingPong.contract, event: "ChainAdded", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainAdded) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "ChainAdded") + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -1221,18 +1239,28 @@ type SelfFundedPingPongChainRemoved struct { Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*SelfFundedPingPongChainRemovedIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*SelfFundedPingPongChainRemovedIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "ChainRemoved") + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } return &SelfFundedPingPongChainRemovedIterator{contract: _SelfFundedPingPong.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainRemoved) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainRemoved, removeChainSelector []uint64) (event.Subscription, error) { + + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "ChainRemoved") + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } @@ -3381,15 +3409,15 @@ type SelfFundedPingPongInterface interface { ParseCCIPRouterModified(log types.Log) (*SelfFundedPingPongCCIPRouterModified, error) - FilterChainAdded(opts *bind.FilterOpts) (*SelfFundedPingPongChainAddedIterator, error) + FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*SelfFundedPingPongChainAddedIterator, error) - WatchChainAdded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainAdded) (event.Subscription, error) + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) ParseChainAdded(log types.Log) (*SelfFundedPingPongChainAdded, error) - FilterChainRemoved(opts *bind.FilterOpts) (*SelfFundedPingPongChainRemovedIterator, error) + FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*SelfFundedPingPongChainRemovedIterator, error) - WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainRemoved) (event.Subscription, error) + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongChainRemoved, removeChainSelector []uint64) (event.Subscription, error) ParseChainRemoved(log types.Log) (*SelfFundedPingPongChainRemoved, 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 7a5cab6f71..ef5bd481b2 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 @@ -5,10 +5,10 @@ burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin fee3f82935ce7a26c65e12f19a472a4fccdae62755abdb42d8b0a01f0f06981a burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin c7efa00d2be62a97a814730c8e13aa70794ebfdd38a9f3b3c11554a5dfd70478 burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin a0728e186af74968101135a58a483320ced9ab79b22b1b24ac6994254ee79097 -ccipClient: ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.abi ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.bin d16b1843e9cc61c9ad4dcb75f69c45144c382f8d51d9b72888993ca18e594207 -ccipReceiver: ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.abi ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.bin 5863d38eaa2471878113f425c54bfe936db105bf5134ace7b231290c11df7fb7 -ccipReceiverWithACK: ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.abi ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.bin becb56686bc251796f317159533d5c81ea034f5bb043f8f1d14d77be3bd5d1ac -ccipSender: ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.abi ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.bin 40952c2869c3dadef3af5407a1183e451c2d19610aa6e39e92f6c3682bbbf194 +ccipClient: ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.abi ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.bin 0d3e5064f9ad28a28778279bcf9e392219f93132d6a04a6a7911d1245a39420d +ccipReceiver: ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.abi ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.bin 1c75330f4f6cc75d7f0decf7ba84fce351ab8dc686199372d06ef2bc9bdc45e2 +ccipReceiverWithACK: ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.abi ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.bin e8e2eedb90cfaee9b2f6ed2130d882d139d45c6c736557efd8772923e5e9ab86 +ccipSender: ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.abi ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.bin fe42de7249e2984e7d59e8257db806f700679015e9343119f6ddc0bc8200c9ec ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin c44460757ca0e1b228734b32b9ab03221b93d77bb9f8e2970830779a8be2cb78 commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin ddc26c10c2a52b59624faae9005827b09b98db4566887a736005e8cc37cf8a51 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin ebd8aac686fa28a71d4212bcd25a28f8f640d50dce5e50498b2f6b8534890b69 @@ -28,11 +28,11 @@ 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 abb0ecb1ed8621f26e43b39f5fa25f3d0b6d6c184fa37c404c4389605ecb74e7 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin cdc11c1ab4c1c3fd77f30215e9c579404a6e60eb9adc213d73ca0773c3bb5784 ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin e21180898e1ad54a045ee20add85a2793c681425ea06f66d1a9e5cab128b6487 -ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 7ac6fd85e962789cefe150a0959a79e02772c84658b02f89d09aa99853b5f3f3 +ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin fa020ab0510f1a48f448a5a93bc30ce8b984c73e6855b667f0f820e0ef4b0ecd price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin 0b3e253684d7085aa11f9179b71453b9db9d11cabea41605d5b4ac4128f85bfb registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin cbe7698bfd811b485ac3856daf073a7bdebeefdf2583403ca4a19d5b7e2d4ae8 router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 42576577e81beea9a069bd9229caaa9a71227fbaef3871a1a2e69fd218216290 -self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin a438934d16529ff5d422f375cdff1c6e11212bdda4e77fb6ee68cf11cb1a930d +self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin b24ddc90b532eaeb93088ab10339ac0c0310d1f14f0f32f48cdef569f59f6267 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin fb06d2cf5f7476e512c6fb7aab8eab43545efd7f0f6ca133c64ff4e3963902c4 token_pool: ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin 47a83e91b28ad1381a2a5882e2adfe168809a63a8f533ab1631f174550c64bed usdc_token_pool: ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin 48caf06855a2f60455364d384e5fb2e6ecdf0a9ce4c1fc706b54b9885df76695