From 9407e4bed8e6c35f3e9b86e53935f47eee5c48b6 Mon Sep 17 00:00:00 2001
From: Shawn <44221603+shaspitz@users.noreply.github.com>
Date: Wed, 11 Sep 2024 16:22:37 -0700
Subject: [PATCH] feat: upgrade MevCommitAVS to v3 on Holesky (#399)

* Create MevCommitAVSV3.sol

* integrate v3 contract w/ tests

* abi + binding for new contract

* upgrade script
---
 contracts-abi/abi/MevCommitAVSV3.abi          | 1564 +++++
 .../clients/MevCommitAVSV3/MevCommitAVSV3.go  | 5804 +++++++++++++++++
 contracts-abi/script.sh                       |    4 +
 contracts/Makefile                            |    8 +
 .../contracts/interfaces/IMevCommitAVSV3.sol  |  211 +
 .../avs/MevCommitAVSStorageV3.sol             |   60 +
 .../validator-registry/avs/MevCommitAVSV3.sol |  655 ++
 .../avs/UpgradeAVSV2ToV3.s.sol                |   83 +
 .../avs/MevCommitAVSTest.sol                  |   20 +-
 9 files changed, 8401 insertions(+), 8 deletions(-)
 create mode 100644 contracts-abi/abi/MevCommitAVSV3.abi
 create mode 100644 contracts-abi/clients/MevCommitAVSV3/MevCommitAVSV3.go
 create mode 100644 contracts/contracts/interfaces/IMevCommitAVSV3.sol
 create mode 100644 contracts/contracts/validator-registry/avs/MevCommitAVSStorageV3.sol
 create mode 100644 contracts/contracts/validator-registry/avs/MevCommitAVSV3.sol
 create mode 100644 contracts/scripts/validator-registry/avs/UpgradeAVSV2ToV3.s.sol

diff --git a/contracts-abi/abi/MevCommitAVSV3.abi b/contracts-abi/abi/MevCommitAVSV3.abi
new file mode 100644
index 000000000..5efd0e78c
--- /dev/null
+++ b/contracts-abi/abi/MevCommitAVSV3.abi
@@ -0,0 +1,1564 @@
+[
+  {
+    "type": "constructor",
+    "inputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "fallback",
+    "stateMutability": "payable"
+  },
+  {
+    "type": "receive",
+    "stateMutability": "payable"
+  },
+  {
+    "type": "function",
+    "name": "UPGRADE_INTERFACE_VERSION",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "string",
+        "internalType": "string"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "acceptOwnership",
+    "inputs": [],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "avsDirectory",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "deregisterLSTRestaker",
+    "inputs": [],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "deregisterOperator",
+    "inputs": [
+      {
+        "name": "operator",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "deregisterValidators",
+    "inputs": [
+      {
+        "name": "valPubKeys",
+        "type": "bytes[]",
+        "internalType": "bytes[]"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "freeze",
+    "inputs": [
+      {
+        "name": "valPubKeys",
+        "type": "bytes[]",
+        "internalType": "bytes[]"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "freezeOracle",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "getLSTRestakerRegInfo",
+    "inputs": [
+      {
+        "name": "lstRestaker",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "",
+        "type": "tuple",
+        "internalType": "struct IMevCommitAVSV3.LSTRestakerRegistrationInfo",
+        "components": [
+          {
+            "name": "exists",
+            "type": "bool",
+            "internalType": "bool"
+          },
+          {
+            "name": "chosenValidators",
+            "type": "bytes[]",
+            "internalType": "bytes[]"
+          },
+          {
+            "name": "numChosen",
+            "type": "uint256",
+            "internalType": "uint256"
+          },
+          {
+            "name": "deregRequestHeight",
+            "type": "tuple",
+            "internalType": "struct EventHeightLib.EventHeight",
+            "components": [
+              {
+                "name": "exists",
+                "type": "bool",
+                "internalType": "bool"
+              },
+              {
+                "name": "blockHeight",
+                "type": "uint256",
+                "internalType": "uint256"
+              }
+            ]
+          }
+        ]
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "getOperatorRegInfo",
+    "inputs": [
+      {
+        "name": "operator",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "",
+        "type": "tuple",
+        "internalType": "struct IMevCommitAVSV3.OperatorRegistrationInfo",
+        "components": [
+          {
+            "name": "exists",
+            "type": "bool",
+            "internalType": "bool"
+          },
+          {
+            "name": "deregRequestHeight",
+            "type": "tuple",
+            "internalType": "struct EventHeightLib.EventHeight",
+            "components": [
+              {
+                "name": "exists",
+                "type": "bool",
+                "internalType": "bool"
+              },
+              {
+                "name": "blockHeight",
+                "type": "uint256",
+                "internalType": "uint256"
+              }
+            ]
+          }
+        ]
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "getOperatorRestakedStrategies",
+    "inputs": [
+      {
+        "name": "operator",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address[]",
+        "internalType": "address[]"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "getRestakeableStrategies",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address[]",
+        "internalType": "address[]"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "getValidatorRegInfo",
+    "inputs": [
+      {
+        "name": "valPubKey",
+        "type": "bytes",
+        "internalType": "bytes"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "",
+        "type": "tuple",
+        "internalType": "struct IMevCommitAVSV3.ValidatorRegistrationInfo",
+        "components": [
+          {
+            "name": "exists",
+            "type": "bool",
+            "internalType": "bool"
+          },
+          {
+            "name": "podOwner",
+            "type": "address",
+            "internalType": "address"
+          },
+          {
+            "name": "freezeHeight",
+            "type": "tuple",
+            "internalType": "struct EventHeightLib.EventHeight",
+            "components": [
+              {
+                "name": "exists",
+                "type": "bool",
+                "internalType": "bool"
+              },
+              {
+                "name": "blockHeight",
+                "type": "uint256",
+                "internalType": "uint256"
+              }
+            ]
+          },
+          {
+            "name": "deregRequestHeight",
+            "type": "tuple",
+            "internalType": "struct EventHeightLib.EventHeight",
+            "components": [
+              {
+                "name": "exists",
+                "type": "bool",
+                "internalType": "bool"
+              },
+              {
+                "name": "blockHeight",
+                "type": "uint256",
+                "internalType": "uint256"
+              }
+            ]
+          }
+        ]
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "initialize",
+    "inputs": [
+      {
+        "name": "owner_",
+        "type": "address",
+        "internalType": "address"
+      },
+      {
+        "name": "delegationManager_",
+        "type": "address",
+        "internalType": "contract IDelegationManager"
+      },
+      {
+        "name": "eigenPodManager_",
+        "type": "address",
+        "internalType": "contract IEigenPodManager"
+      },
+      {
+        "name": "strategyManager_",
+        "type": "address",
+        "internalType": "contract IStrategyManager"
+      },
+      {
+        "name": "avsDirectory_",
+        "type": "address",
+        "internalType": "contract IAVSDirectory"
+      },
+      {
+        "name": "restakeableStrategies_",
+        "type": "address[]",
+        "internalType": "address[]"
+      },
+      {
+        "name": "freezeOracle_",
+        "type": "address",
+        "internalType": "address"
+      },
+      {
+        "name": "unfreezeFee_",
+        "type": "uint256",
+        "internalType": "uint256"
+      },
+      {
+        "name": "unfreezeReceiver_",
+        "type": "address",
+        "internalType": "address"
+      },
+      {
+        "name": "unfreezePeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      },
+      {
+        "name": "operatorDeregPeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      },
+      {
+        "name": "validatorDeregPeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      },
+      {
+        "name": "lstRestakerDeregPeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      },
+      {
+        "name": "metadataURI_",
+        "type": "string",
+        "internalType": "string"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "isValidatorOptedIn",
+    "inputs": [
+      {
+        "name": "valPubKey",
+        "type": "bytes",
+        "internalType": "bytes"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "",
+        "type": "bool",
+        "internalType": "bool"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "lstRestakerDeregPeriodBlocks",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "lstRestakerRegistrations",
+    "inputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "exists",
+        "type": "bool",
+        "internalType": "bool"
+      },
+      {
+        "name": "numChosen",
+        "type": "uint256",
+        "internalType": "uint256"
+      },
+      {
+        "name": "deregRequestHeight",
+        "type": "tuple",
+        "internalType": "struct EventHeightLib.EventHeight",
+        "components": [
+          {
+            "name": "exists",
+            "type": "bool",
+            "internalType": "bool"
+          },
+          {
+            "name": "blockHeight",
+            "type": "uint256",
+            "internalType": "uint256"
+          }
+        ]
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "operatorDeregPeriodBlocks",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "operatorRegistrations",
+    "inputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "exists",
+        "type": "bool",
+        "internalType": "bool"
+      },
+      {
+        "name": "deregRequestHeight",
+        "type": "tuple",
+        "internalType": "struct EventHeightLib.EventHeight",
+        "components": [
+          {
+            "name": "exists",
+            "type": "bool",
+            "internalType": "bool"
+          },
+          {
+            "name": "blockHeight",
+            "type": "uint256",
+            "internalType": "uint256"
+          }
+        ]
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "owner",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "pause",
+    "inputs": [],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "paused",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "bool",
+        "internalType": "bool"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "pendingOwner",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "proxiableUUID",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "bytes32",
+        "internalType": "bytes32"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "registerLSTRestaker",
+    "inputs": [
+      {
+        "name": "chosenValidators",
+        "type": "bytes[]",
+        "internalType": "bytes[]"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "registerOperator",
+    "inputs": [
+      {
+        "name": "operatorSignature",
+        "type": "tuple",
+        "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry",
+        "components": [
+          {
+            "name": "signature",
+            "type": "bytes",
+            "internalType": "bytes"
+          },
+          {
+            "name": "salt",
+            "type": "bytes32",
+            "internalType": "bytes32"
+          },
+          {
+            "name": "expiry",
+            "type": "uint256",
+            "internalType": "uint256"
+          }
+        ]
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "registerValidatorsByPodOwners",
+    "inputs": [
+      {
+        "name": "valPubKeys",
+        "type": "bytes[][]",
+        "internalType": "bytes[][]"
+      },
+      {
+        "name": "podOwners",
+        "type": "address[]",
+        "internalType": "address[]"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "renounceOwnership",
+    "inputs": [],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "requestLSTRestakerDeregistration",
+    "inputs": [],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "requestOperatorDeregistration",
+    "inputs": [
+      {
+        "name": "operator",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "requestValidatorsDeregistration",
+    "inputs": [
+      {
+        "name": "valPubKeys",
+        "type": "bytes[]",
+        "internalType": "bytes[]"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "restakeableStrategies",
+    "inputs": [
+      {
+        "name": "",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "setAVSDirectory",
+    "inputs": [
+      {
+        "name": "avsDirectory_",
+        "type": "address",
+        "internalType": "contract IAVSDirectory"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setDelegationManager",
+    "inputs": [
+      {
+        "name": "delegationManager_",
+        "type": "address",
+        "internalType": "contract IDelegationManager"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setEigenPodManager",
+    "inputs": [
+      {
+        "name": "eigenPodManager_",
+        "type": "address",
+        "internalType": "contract IEigenPodManager"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setFreezeOracle",
+    "inputs": [
+      {
+        "name": "freezeOracle_",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setLstRestakerDeregPeriodBlocks",
+    "inputs": [
+      {
+        "name": "lstRestakerDeregPeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setOperatorDeregPeriodBlocks",
+    "inputs": [
+      {
+        "name": "operatorDeregPeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setRestakeableStrategies",
+    "inputs": [
+      {
+        "name": "restakeableStrategies_",
+        "type": "address[]",
+        "internalType": "address[]"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setStrategyManager",
+    "inputs": [
+      {
+        "name": "strategyManager_",
+        "type": "address",
+        "internalType": "contract IStrategyManager"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setUnfreezeFee",
+    "inputs": [
+      {
+        "name": "unfreezeFee_",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setUnfreezePeriodBlocks",
+    "inputs": [
+      {
+        "name": "unfreezePeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setUnfreezeReceiver",
+    "inputs": [
+      {
+        "name": "unfreezeReceiver_",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "setValidatorDeregPeriodBlocks",
+    "inputs": [
+      {
+        "name": "validatorDeregPeriodBlocks_",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "transferOwnership",
+    "inputs": [
+      {
+        "name": "newOwner",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "unfreeze",
+    "inputs": [
+      {
+        "name": "valPubKey",
+        "type": "bytes[]",
+        "internalType": "bytes[]"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "payable"
+  },
+  {
+    "type": "function",
+    "name": "unfreezeFee",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "unfreezePeriodBlocks",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "unfreezeReceiver",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "address",
+        "internalType": "address"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "unpause",
+    "inputs": [],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "updateMetadataURI",
+    "inputs": [
+      {
+        "name": "metadataURI_",
+        "type": "string",
+        "internalType": "string"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "nonpayable"
+  },
+  {
+    "type": "function",
+    "name": "upgradeToAndCall",
+    "inputs": [
+      {
+        "name": "newImplementation",
+        "type": "address",
+        "internalType": "address"
+      },
+      {
+        "name": "data",
+        "type": "bytes",
+        "internalType": "bytes"
+      }
+    ],
+    "outputs": [],
+    "stateMutability": "payable"
+  },
+  {
+    "type": "function",
+    "name": "validatorDeregPeriodBlocks",
+    "inputs": [],
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256",
+        "internalType": "uint256"
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "validatorRegistrations",
+    "inputs": [
+      {
+        "name": "",
+        "type": "bytes",
+        "internalType": "bytes"
+      }
+    ],
+    "outputs": [
+      {
+        "name": "exists",
+        "type": "bool",
+        "internalType": "bool"
+      },
+      {
+        "name": "podOwner",
+        "type": "address",
+        "internalType": "address"
+      },
+      {
+        "name": "freezeHeight",
+        "type": "tuple",
+        "internalType": "struct EventHeightLib.EventHeight",
+        "components": [
+          {
+            "name": "exists",
+            "type": "bool",
+            "internalType": "bool"
+          },
+          {
+            "name": "blockHeight",
+            "type": "uint256",
+            "internalType": "uint256"
+          }
+        ]
+      },
+      {
+        "name": "deregRequestHeight",
+        "type": "tuple",
+        "internalType": "struct EventHeightLib.EventHeight",
+        "components": [
+          {
+            "name": "exists",
+            "type": "bool",
+            "internalType": "bool"
+          },
+          {
+            "name": "blockHeight",
+            "type": "uint256",
+            "internalType": "uint256"
+          }
+        ]
+      }
+    ],
+    "stateMutability": "view"
+  },
+  {
+    "type": "event",
+    "name": "AVSDirectorySet",
+    "inputs": [
+      {
+        "name": "avsDirectory",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "DelegationManagerSet",
+    "inputs": [
+      {
+        "name": "delegationManager",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "EigenPodManagerSet",
+    "inputs": [
+      {
+        "name": "eigenPodManager",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "FreezeOracleSet",
+    "inputs": [
+      {
+        "name": "freezeOracle",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "Initialized",
+    "inputs": [
+      {
+        "name": "version",
+        "type": "uint64",
+        "indexed": false,
+        "internalType": "uint64"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "LSTRestakerDeregPeriodBlocksSet",
+    "inputs": [
+      {
+        "name": "lstRestakerDeregPeriodBlocks",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "LSTRestakerDeregistered",
+    "inputs": [
+      {
+        "name": "chosenValidator",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "numChosen",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      },
+      {
+        "name": "lstRestaker",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "LSTRestakerDeregistrationRequested",
+    "inputs": [
+      {
+        "name": "chosenValidator",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "numChosen",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      },
+      {
+        "name": "lstRestaker",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "LSTRestakerRegistered",
+    "inputs": [
+      {
+        "name": "chosenValidator",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "numChosen",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      },
+      {
+        "name": "lstRestaker",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "OperatorDeregPeriodBlocksSet",
+    "inputs": [
+      {
+        "name": "operatorDeregPeriodBlocks",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "OperatorDeregistered",
+    "inputs": [
+      {
+        "name": "operator",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "OperatorDeregistrationRequested",
+    "inputs": [
+      {
+        "name": "operator",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "OperatorRegistered",
+    "inputs": [
+      {
+        "name": "operator",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "OwnershipTransferStarted",
+    "inputs": [
+      {
+        "name": "previousOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      },
+      {
+        "name": "newOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "OwnershipTransferred",
+    "inputs": [
+      {
+        "name": "previousOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      },
+      {
+        "name": "newOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "Paused",
+    "inputs": [
+      {
+        "name": "account",
+        "type": "address",
+        "indexed": false,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "RestakeableStrategiesSet",
+    "inputs": [
+      {
+        "name": "restakeableStrategies",
+        "type": "address[]",
+        "indexed": true,
+        "internalType": "address[]"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "StrategyManagerSet",
+    "inputs": [
+      {
+        "name": "strategyManager",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "UnfreezeFeeSet",
+    "inputs": [
+      {
+        "name": "unfreezeFee",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "UnfreezePeriodBlocksSet",
+    "inputs": [
+      {
+        "name": "unfreezePeriodBlocks",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "UnfreezeReceiverSet",
+    "inputs": [
+      {
+        "name": "unfreezeReceiver",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "Unpaused",
+    "inputs": [
+      {
+        "name": "account",
+        "type": "address",
+        "indexed": false,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "Upgraded",
+    "inputs": [
+      {
+        "name": "implementation",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "ValidatorDeregPeriodBlocksSet",
+    "inputs": [
+      {
+        "name": "validatorDeregPeriodBlocks",
+        "type": "uint256",
+        "indexed": false,
+        "internalType": "uint256"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "ValidatorDeregistered",
+    "inputs": [
+      {
+        "name": "validatorPubKey",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "podOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "ValidatorDeregistrationRequested",
+    "inputs": [
+      {
+        "name": "validatorPubKey",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "podOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "ValidatorFrozen",
+    "inputs": [
+      {
+        "name": "validatorPubKey",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "podOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "ValidatorRegistered",
+    "inputs": [
+      {
+        "name": "validatorPubKey",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "podOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "event",
+    "name": "ValidatorUnfrozen",
+    "inputs": [
+      {
+        "name": "validatorPubKey",
+        "type": "bytes",
+        "indexed": false,
+        "internalType": "bytes"
+      },
+      {
+        "name": "podOwner",
+        "type": "address",
+        "indexed": true,
+        "internalType": "address"
+      }
+    ],
+    "anonymous": false
+  },
+  {
+    "type": "error",
+    "name": "AddressEmptyCode",
+    "inputs": [
+      {
+        "name": "target",
+        "type": "address",
+        "internalType": "address"
+      }
+    ]
+  },
+  {
+    "type": "error",
+    "name": "ERC1967InvalidImplementation",
+    "inputs": [
+      {
+        "name": "implementation",
+        "type": "address",
+        "internalType": "address"
+      }
+    ]
+  },
+  {
+    "type": "error",
+    "name": "ERC1967NonPayable",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "EnforcedPause",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "ExpectedPause",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "FailedInnerCall",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "InvalidFallback",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "InvalidInitialization",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "InvalidReceive",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "NotInitializing",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "OwnableInvalidOwner",
+    "inputs": [
+      {
+        "name": "owner",
+        "type": "address",
+        "internalType": "address"
+      }
+    ]
+  },
+  {
+    "type": "error",
+    "name": "OwnableUnauthorizedAccount",
+    "inputs": [
+      {
+        "name": "account",
+        "type": "address",
+        "internalType": "address"
+      }
+    ]
+  },
+  {
+    "type": "error",
+    "name": "UUPSUnauthorizedCallContext",
+    "inputs": []
+  },
+  {
+    "type": "error",
+    "name": "UUPSUnsupportedProxiableUUID",
+    "inputs": [
+      {
+        "name": "slot",
+        "type": "bytes32",
+        "internalType": "bytes32"
+      }
+    ]
+  }
+]
diff --git a/contracts-abi/clients/MevCommitAVSV3/MevCommitAVSV3.go b/contracts-abi/clients/MevCommitAVSV3/MevCommitAVSV3.go
new file mode 100644
index 000000000..9ec0e00b6
--- /dev/null
+++ b/contracts-abi/clients/MevCommitAVSV3/MevCommitAVSV3.go
@@ -0,0 +1,5804 @@
+// Code generated - DO NOT EDIT.
+// This file is a generated binding and any manual changes will be lost.
+
+package mevcommitavsv3
+
+import (
+	"errors"
+	"math/big"
+	"strings"
+
+	ethereum "github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/accounts/abi"
+	"github.com/ethereum/go-ethereum/accounts/abi/bind"
+	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/event"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var (
+	_ = errors.New
+	_ = big.NewInt
+	_ = strings.NewReader
+	_ = ethereum.NotFound
+	_ = bind.Bind
+	_ = common.Big1
+	_ = types.BloomLookup
+	_ = event.NewSubscription
+	_ = abi.ConvertType
+)
+
+// EventHeightLibEventHeight is an auto generated low-level Go binding around an user-defined struct.
+type EventHeightLibEventHeight struct {
+	Exists      bool
+	BlockHeight *big.Int
+}
+
+// IMevCommitAVSV3LSTRestakerRegistrationInfo is an auto generated low-level Go binding around an user-defined struct.
+type IMevCommitAVSV3LSTRestakerRegistrationInfo struct {
+	Exists             bool
+	ChosenValidators   [][]byte
+	NumChosen          *big.Int
+	DeregRequestHeight EventHeightLibEventHeight
+}
+
+// IMevCommitAVSV3OperatorRegistrationInfo is an auto generated low-level Go binding around an user-defined struct.
+type IMevCommitAVSV3OperatorRegistrationInfo struct {
+	Exists             bool
+	DeregRequestHeight EventHeightLibEventHeight
+}
+
+// IMevCommitAVSV3ValidatorRegistrationInfo is an auto generated low-level Go binding around an user-defined struct.
+type IMevCommitAVSV3ValidatorRegistrationInfo struct {
+	Exists             bool
+	PodOwner           common.Address
+	FreezeHeight       EventHeightLibEventHeight
+	DeregRequestHeight EventHeightLibEventHeight
+}
+
+// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct.
+type ISignatureUtilsSignatureWithSaltAndExpiry struct {
+	Signature []byte
+	Salt      [32]byte
+	Expiry    *big.Int
+}
+
+// Mevcommitavsv3MetaData contains all meta data concerning the Mevcommitavsv3 contract.
+var Mevcommitavsv3MetaData = &bind.MetaData{
+	ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterLSTRestaker\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterValidators\",\"inputs\":[{\"name\":\"valPubKeys\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"freeze\",\"inputs\":[{\"name\":\"valPubKeys\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"freezeOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLSTRestakerRegInfo\",\"inputs\":[{\"name\":\"lstRestaker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIMevCommitAVSV3.LSTRestakerRegistrationInfo\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"chosenValidators\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"numChosen\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"deregRequestHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorRegInfo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIMevCommitAVSV3.OperatorRegistrationInfo\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deregRequestHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getValidatorRegInfo\",\"inputs\":[{\"name\":\"valPubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIMevCommitAVSV3.ValidatorRegistrationInfo\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"freezeHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"deregRequestHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationManager_\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"eigenPodManager_\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"strategyManager_\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"avsDirectory_\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"restakeableStrategies_\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"freezeOracle_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"unfreezeFee_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"unfreezeReceiver_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"unfreezePeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operatorDeregPeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"validatorDeregPeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"lstRestakerDeregPeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"metadataURI_\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isValidatorOptedIn\",\"inputs\":[{\"name\":\"valPubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lstRestakerDeregPeriodBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lstRestakerRegistrations\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"numChosen\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"deregRequestHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorDeregPeriodBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorRegistrations\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deregRequestHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerLSTRestaker\",\"inputs\":[{\"name\":\"chosenValidators\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerValidatorsByPodOwners\",\"inputs\":[{\"name\":\"valPubKeys\",\"type\":\"bytes[][]\",\"internalType\":\"bytes[][]\"},{\"name\":\"podOwners\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestLSTRestakerDeregistration\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestOperatorDeregistration\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestValidatorsDeregistration\",\"inputs\":[{\"name\":\"valPubKeys\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"restakeableStrategies\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setAVSDirectory\",\"inputs\":[{\"name\":\"avsDirectory_\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDelegationManager\",\"inputs\":[{\"name\":\"delegationManager_\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEigenPodManager\",\"inputs\":[{\"name\":\"eigenPodManager_\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFreezeOracle\",\"inputs\":[{\"name\":\"freezeOracle_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setLstRestakerDeregPeriodBlocks\",\"inputs\":[{\"name\":\"lstRestakerDeregPeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorDeregPeriodBlocks\",\"inputs\":[{\"name\":\"operatorDeregPeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRestakeableStrategies\",\"inputs\":[{\"name\":\"restakeableStrategies_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyManager\",\"inputs\":[{\"name\":\"strategyManager_\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnfreezeFee\",\"inputs\":[{\"name\":\"unfreezeFee_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnfreezePeriodBlocks\",\"inputs\":[{\"name\":\"unfreezePeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnfreezeReceiver\",\"inputs\":[{\"name\":\"unfreezeReceiver_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setValidatorDeregPeriodBlocks\",\"inputs\":[{\"name\":\"validatorDeregPeriodBlocks_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unfreeze\",\"inputs\":[{\"name\":\"valPubKey\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"unfreezeFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unfreezePeriodBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unfreezeReceiver\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateMetadataURI\",\"inputs\":[{\"name\":\"metadataURI_\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"validatorDeregPeriodBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorRegistrations\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"freezeHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"deregRequestHeight\",\"type\":\"tuple\",\"internalType\":\"structEventHeightLib.EventHeight\",\"components\":[{\"name\":\"exists\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blockHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSDirectorySet\",\"inputs\":[{\"name\":\"avsDirectory\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegationManagerSet\",\"inputs\":[{\"name\":\"delegationManager\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodManagerSet\",\"inputs\":[{\"name\":\"eigenPodManager\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FreezeOracleSet\",\"inputs\":[{\"name\":\"freezeOracle\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LSTRestakerDeregPeriodBlocksSet\",\"inputs\":[{\"name\":\"lstRestakerDeregPeriodBlocks\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LSTRestakerDeregistered\",\"inputs\":[{\"name\":\"chosenValidator\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"numChosen\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"lstRestaker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LSTRestakerDeregistrationRequested\",\"inputs\":[{\"name\":\"chosenValidator\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"numChosen\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"lstRestaker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LSTRestakerRegistered\",\"inputs\":[{\"name\":\"chosenValidator\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"numChosen\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"lstRestaker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDeregPeriodBlocksSet\",\"inputs\":[{\"name\":\"operatorDeregPeriodBlocks\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDeregistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDeregistrationRequested\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakeableStrategiesSet\",\"inputs\":[{\"name\":\"restakeableStrategies\",\"type\":\"address[]\",\"indexed\":true,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyManagerSet\",\"inputs\":[{\"name\":\"strategyManager\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UnfreezeFeeSet\",\"inputs\":[{\"name\":\"unfreezeFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UnfreezePeriodBlocksSet\",\"inputs\":[{\"name\":\"unfreezePeriodBlocks\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UnfreezeReceiverSet\",\"inputs\":[{\"name\":\"unfreezeReceiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorDeregPeriodBlocksSet\",\"inputs\":[{\"name\":\"validatorDeregPeriodBlocks\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorDeregistered\",\"inputs\":[{\"name\":\"validatorPubKey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorDeregistrationRequested\",\"inputs\":[{\"name\":\"validatorPubKey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorFrozen\",\"inputs\":[{\"name\":\"validatorPubKey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRegistered\",\"inputs\":[{\"name\":\"validatorPubKey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorUnfrozen\",\"inputs\":[{\"name\":\"validatorPubKey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidFallback\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidReceive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]",
+}
+
+// Mevcommitavsv3ABI is the input ABI used to generate the binding from.
+// Deprecated: Use Mevcommitavsv3MetaData.ABI instead.
+var Mevcommitavsv3ABI = Mevcommitavsv3MetaData.ABI
+
+// Mevcommitavsv3 is an auto generated Go binding around an Ethereum contract.
+type Mevcommitavsv3 struct {
+	Mevcommitavsv3Caller     // Read-only binding to the contract
+	Mevcommitavsv3Transactor // Write-only binding to the contract
+	Mevcommitavsv3Filterer   // Log filterer for contract events
+}
+
+// Mevcommitavsv3Caller is an auto generated read-only Go binding around an Ethereum contract.
+type Mevcommitavsv3Caller struct {
+	contract *bind.BoundContract // Generic contract wrapper for the low level calls
+}
+
+// Mevcommitavsv3Transactor is an auto generated write-only Go binding around an Ethereum contract.
+type Mevcommitavsv3Transactor struct {
+	contract *bind.BoundContract // Generic contract wrapper for the low level calls
+}
+
+// Mevcommitavsv3Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
+type Mevcommitavsv3Filterer struct {
+	contract *bind.BoundContract // Generic contract wrapper for the low level calls
+}
+
+// Mevcommitavsv3Session is an auto generated Go binding around an Ethereum contract,
+// with pre-set call and transact options.
+type Mevcommitavsv3Session struct {
+	Contract     *Mevcommitavsv3   // Generic contract binding to set the session for
+	CallOpts     bind.CallOpts     // Call options to use throughout this session
+	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
+}
+
+// Mevcommitavsv3CallerSession is an auto generated read-only Go binding around an Ethereum contract,
+// with pre-set call options.
+type Mevcommitavsv3CallerSession struct {
+	Contract *Mevcommitavsv3Caller // Generic contract caller binding to set the session for
+	CallOpts bind.CallOpts         // Call options to use throughout this session
+}
+
+// Mevcommitavsv3TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
+// with pre-set transact options.
+type Mevcommitavsv3TransactorSession struct {
+	Contract     *Mevcommitavsv3Transactor // Generic contract transactor binding to set the session for
+	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
+}
+
+// Mevcommitavsv3Raw is an auto generated low-level Go binding around an Ethereum contract.
+type Mevcommitavsv3Raw struct {
+	Contract *Mevcommitavsv3 // Generic contract binding to access the raw methods on
+}
+
+// Mevcommitavsv3CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
+type Mevcommitavsv3CallerRaw struct {
+	Contract *Mevcommitavsv3Caller // Generic read-only contract binding to access the raw methods on
+}
+
+// Mevcommitavsv3TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
+type Mevcommitavsv3TransactorRaw struct {
+	Contract *Mevcommitavsv3Transactor // Generic write-only contract binding to access the raw methods on
+}
+
+// NewMevcommitavsv3 creates a new instance of Mevcommitavsv3, bound to a specific deployed contract.
+func NewMevcommitavsv3(address common.Address, backend bind.ContractBackend) (*Mevcommitavsv3, error) {
+	contract, err := bindMevcommitavsv3(address, backend, backend, backend)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3{Mevcommitavsv3Caller: Mevcommitavsv3Caller{contract: contract}, Mevcommitavsv3Transactor: Mevcommitavsv3Transactor{contract: contract}, Mevcommitavsv3Filterer: Mevcommitavsv3Filterer{contract: contract}}, nil
+}
+
+// NewMevcommitavsv3Caller creates a new read-only instance of Mevcommitavsv3, bound to a specific deployed contract.
+func NewMevcommitavsv3Caller(address common.Address, caller bind.ContractCaller) (*Mevcommitavsv3Caller, error) {
+	contract, err := bindMevcommitavsv3(address, caller, nil, nil)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3Caller{contract: contract}, nil
+}
+
+// NewMevcommitavsv3Transactor creates a new write-only instance of Mevcommitavsv3, bound to a specific deployed contract.
+func NewMevcommitavsv3Transactor(address common.Address, transactor bind.ContractTransactor) (*Mevcommitavsv3Transactor, error) {
+	contract, err := bindMevcommitavsv3(address, nil, transactor, nil)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3Transactor{contract: contract}, nil
+}
+
+// NewMevcommitavsv3Filterer creates a new log filterer instance of Mevcommitavsv3, bound to a specific deployed contract.
+func NewMevcommitavsv3Filterer(address common.Address, filterer bind.ContractFilterer) (*Mevcommitavsv3Filterer, error) {
+	contract, err := bindMevcommitavsv3(address, nil, nil, filterer)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3Filterer{contract: contract}, nil
+}
+
+// bindMevcommitavsv3 binds a generic wrapper to an already deployed contract.
+func bindMevcommitavsv3(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
+	parsed, err := Mevcommitavsv3MetaData.GetAbi()
+	if err != nil {
+		return nil, err
+	}
+	return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
+}
+
+// Call invokes the (constant) contract method with params as input values and
+// sets the output to result. The result type might be a single field for simple
+// returns, a slice of interfaces for anonymous returns and a struct for named
+// returns.
+func (_Mevcommitavsv3 *Mevcommitavsv3Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+	return _Mevcommitavsv3.Contract.Mevcommitavsv3Caller.contract.Call(opts, result, method, params...)
+}
+
+// Transfer initiates a plain transaction to move funds to the contract, calling
+// its default method if one is available.
+func (_Mevcommitavsv3 *Mevcommitavsv3Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Mevcommitavsv3Transactor.contract.Transfer(opts)
+}
+
+// Transact invokes the (paid) contract method with params as input values.
+func (_Mevcommitavsv3 *Mevcommitavsv3Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Mevcommitavsv3Transactor.contract.Transact(opts, method, params...)
+}
+
+// Call invokes the (constant) contract method with params as input values and
+// sets the output to result. The result type might be a single field for simple
+// returns, a slice of interfaces for anonymous returns and a struct for named
+// returns.
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+	return _Mevcommitavsv3.Contract.contract.Call(opts, result, method, params...)
+}
+
+// Transfer initiates a plain transaction to move funds to the contract, calling
+// its default method if one is available.
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.contract.Transfer(opts)
+}
+
+// Transact invokes the (paid) contract method with params as input values.
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.contract.Transact(opts, method, params...)
+}
+
+// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc.
+//
+// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION")
+
+	if err != nil {
+		return *new(string), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(string)).(*string)
+
+	return out0, err
+
+}
+
+// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc.
+//
+// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) UPGRADEINTERFACEVERSION() (string, error) {
+	return _Mevcommitavsv3.Contract.UPGRADEINTERFACEVERSION(&_Mevcommitavsv3.CallOpts)
+}
+
+// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc.
+//
+// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) UPGRADEINTERFACEVERSION() (string, error) {
+	return _Mevcommitavsv3.Contract.UPGRADEINTERFACEVERSION(&_Mevcommitavsv3.CallOpts)
+}
+
+// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e.
+//
+// Solidity: function avsDirectory() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "avsDirectory")
+
+	if err != nil {
+		return *new(common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+	return out0, err
+
+}
+
+// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e.
+//
+// Solidity: function avsDirectory() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) AvsDirectory() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.AvsDirectory(&_Mevcommitavsv3.CallOpts)
+}
+
+// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e.
+//
+// Solidity: function avsDirectory() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) AvsDirectory() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.AvsDirectory(&_Mevcommitavsv3.CallOpts)
+}
+
+// FreezeOracle is a free data retrieval call binding the contract method 0xaf91e0bf.
+//
+// Solidity: function freezeOracle() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) FreezeOracle(opts *bind.CallOpts) (common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "freezeOracle")
+
+	if err != nil {
+		return *new(common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+	return out0, err
+
+}
+
+// FreezeOracle is a free data retrieval call binding the contract method 0xaf91e0bf.
+//
+// Solidity: function freezeOracle() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) FreezeOracle() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.FreezeOracle(&_Mevcommitavsv3.CallOpts)
+}
+
+// FreezeOracle is a free data retrieval call binding the contract method 0xaf91e0bf.
+//
+// Solidity: function freezeOracle() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) FreezeOracle() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.FreezeOracle(&_Mevcommitavsv3.CallOpts)
+}
+
+// GetLSTRestakerRegInfo is a free data retrieval call binding the contract method 0xeaeb9c88.
+//
+// Solidity: function getLSTRestakerRegInfo(address lstRestaker) view returns((bool,bytes[],uint256,(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) GetLSTRestakerRegInfo(opts *bind.CallOpts, lstRestaker common.Address) (IMevCommitAVSV3LSTRestakerRegistrationInfo, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "getLSTRestakerRegInfo", lstRestaker)
+
+	if err != nil {
+		return *new(IMevCommitAVSV3LSTRestakerRegistrationInfo), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(IMevCommitAVSV3LSTRestakerRegistrationInfo)).(*IMevCommitAVSV3LSTRestakerRegistrationInfo)
+
+	return out0, err
+
+}
+
+// GetLSTRestakerRegInfo is a free data retrieval call binding the contract method 0xeaeb9c88.
+//
+// Solidity: function getLSTRestakerRegInfo(address lstRestaker) view returns((bool,bytes[],uint256,(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) GetLSTRestakerRegInfo(lstRestaker common.Address) (IMevCommitAVSV3LSTRestakerRegistrationInfo, error) {
+	return _Mevcommitavsv3.Contract.GetLSTRestakerRegInfo(&_Mevcommitavsv3.CallOpts, lstRestaker)
+}
+
+// GetLSTRestakerRegInfo is a free data retrieval call binding the contract method 0xeaeb9c88.
+//
+// Solidity: function getLSTRestakerRegInfo(address lstRestaker) view returns((bool,bytes[],uint256,(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) GetLSTRestakerRegInfo(lstRestaker common.Address) (IMevCommitAVSV3LSTRestakerRegistrationInfo, error) {
+	return _Mevcommitavsv3.Contract.GetLSTRestakerRegInfo(&_Mevcommitavsv3.CallOpts, lstRestaker)
+}
+
+// GetOperatorRegInfo is a free data retrieval call binding the contract method 0x2c249e6c.
+//
+// Solidity: function getOperatorRegInfo(address operator) view returns((bool,(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) GetOperatorRegInfo(opts *bind.CallOpts, operator common.Address) (IMevCommitAVSV3OperatorRegistrationInfo, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "getOperatorRegInfo", operator)
+
+	if err != nil {
+		return *new(IMevCommitAVSV3OperatorRegistrationInfo), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(IMevCommitAVSV3OperatorRegistrationInfo)).(*IMevCommitAVSV3OperatorRegistrationInfo)
+
+	return out0, err
+
+}
+
+// GetOperatorRegInfo is a free data retrieval call binding the contract method 0x2c249e6c.
+//
+// Solidity: function getOperatorRegInfo(address operator) view returns((bool,(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) GetOperatorRegInfo(operator common.Address) (IMevCommitAVSV3OperatorRegistrationInfo, error) {
+	return _Mevcommitavsv3.Contract.GetOperatorRegInfo(&_Mevcommitavsv3.CallOpts, operator)
+}
+
+// GetOperatorRegInfo is a free data retrieval call binding the contract method 0x2c249e6c.
+//
+// Solidity: function getOperatorRegInfo(address operator) view returns((bool,(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) GetOperatorRegInfo(operator common.Address) (IMevCommitAVSV3OperatorRegistrationInfo, error) {
+	return _Mevcommitavsv3.Contract.GetOperatorRegInfo(&_Mevcommitavsv3.CallOpts, operator)
+}
+
+// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7.
+//
+// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[])
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) GetOperatorRestakedStrategies(opts *bind.CallOpts, operator common.Address) ([]common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "getOperatorRestakedStrategies", operator)
+
+	if err != nil {
+		return *new([]common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)
+
+	return out0, err
+
+}
+
+// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7.
+//
+// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[])
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) {
+	return _Mevcommitavsv3.Contract.GetOperatorRestakedStrategies(&_Mevcommitavsv3.CallOpts, operator)
+}
+
+// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7.
+//
+// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[])
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) {
+	return _Mevcommitavsv3.Contract.GetOperatorRestakedStrategies(&_Mevcommitavsv3.CallOpts, operator)
+}
+
+// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d.
+//
+// Solidity: function getRestakeableStrategies() view returns(address[])
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) GetRestakeableStrategies(opts *bind.CallOpts) ([]common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "getRestakeableStrategies")
+
+	if err != nil {
+		return *new([]common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)
+
+	return out0, err
+
+}
+
+// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d.
+//
+// Solidity: function getRestakeableStrategies() view returns(address[])
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) GetRestakeableStrategies() ([]common.Address, error) {
+	return _Mevcommitavsv3.Contract.GetRestakeableStrategies(&_Mevcommitavsv3.CallOpts)
+}
+
+// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d.
+//
+// Solidity: function getRestakeableStrategies() view returns(address[])
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) GetRestakeableStrategies() ([]common.Address, error) {
+	return _Mevcommitavsv3.Contract.GetRestakeableStrategies(&_Mevcommitavsv3.CallOpts)
+}
+
+// GetValidatorRegInfo is a free data retrieval call binding the contract method 0x972ac83c.
+//
+// Solidity: function getValidatorRegInfo(bytes valPubKey) view returns((bool,address,(bool,uint256),(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) GetValidatorRegInfo(opts *bind.CallOpts, valPubKey []byte) (IMevCommitAVSV3ValidatorRegistrationInfo, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "getValidatorRegInfo", valPubKey)
+
+	if err != nil {
+		return *new(IMevCommitAVSV3ValidatorRegistrationInfo), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(IMevCommitAVSV3ValidatorRegistrationInfo)).(*IMevCommitAVSV3ValidatorRegistrationInfo)
+
+	return out0, err
+
+}
+
+// GetValidatorRegInfo is a free data retrieval call binding the contract method 0x972ac83c.
+//
+// Solidity: function getValidatorRegInfo(bytes valPubKey) view returns((bool,address,(bool,uint256),(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) GetValidatorRegInfo(valPubKey []byte) (IMevCommitAVSV3ValidatorRegistrationInfo, error) {
+	return _Mevcommitavsv3.Contract.GetValidatorRegInfo(&_Mevcommitavsv3.CallOpts, valPubKey)
+}
+
+// GetValidatorRegInfo is a free data retrieval call binding the contract method 0x972ac83c.
+//
+// Solidity: function getValidatorRegInfo(bytes valPubKey) view returns((bool,address,(bool,uint256),(bool,uint256)))
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) GetValidatorRegInfo(valPubKey []byte) (IMevCommitAVSV3ValidatorRegistrationInfo, error) {
+	return _Mevcommitavsv3.Contract.GetValidatorRegInfo(&_Mevcommitavsv3.CallOpts, valPubKey)
+}
+
+// IsValidatorOptedIn is a free data retrieval call binding the contract method 0x470b690f.
+//
+// Solidity: function isValidatorOptedIn(bytes valPubKey) view returns(bool)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) IsValidatorOptedIn(opts *bind.CallOpts, valPubKey []byte) (bool, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "isValidatorOptedIn", valPubKey)
+
+	if err != nil {
+		return *new(bool), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+	return out0, err
+
+}
+
+// IsValidatorOptedIn is a free data retrieval call binding the contract method 0x470b690f.
+//
+// Solidity: function isValidatorOptedIn(bytes valPubKey) view returns(bool)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) IsValidatorOptedIn(valPubKey []byte) (bool, error) {
+	return _Mevcommitavsv3.Contract.IsValidatorOptedIn(&_Mevcommitavsv3.CallOpts, valPubKey)
+}
+
+// IsValidatorOptedIn is a free data retrieval call binding the contract method 0x470b690f.
+//
+// Solidity: function isValidatorOptedIn(bytes valPubKey) view returns(bool)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) IsValidatorOptedIn(valPubKey []byte) (bool, error) {
+	return _Mevcommitavsv3.Contract.IsValidatorOptedIn(&_Mevcommitavsv3.CallOpts, valPubKey)
+}
+
+// LstRestakerDeregPeriodBlocks is a free data retrieval call binding the contract method 0xb0282b23.
+//
+// Solidity: function lstRestakerDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) LstRestakerDeregPeriodBlocks(opts *bind.CallOpts) (*big.Int, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "lstRestakerDeregPeriodBlocks")
+
+	if err != nil {
+		return *new(*big.Int), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+	return out0, err
+
+}
+
+// LstRestakerDeregPeriodBlocks is a free data retrieval call binding the contract method 0xb0282b23.
+//
+// Solidity: function lstRestakerDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) LstRestakerDeregPeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.LstRestakerDeregPeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// LstRestakerDeregPeriodBlocks is a free data retrieval call binding the contract method 0xb0282b23.
+//
+// Solidity: function lstRestakerDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) LstRestakerDeregPeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.LstRestakerDeregPeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// LstRestakerRegistrations is a free data retrieval call binding the contract method 0x25911aba.
+//
+// Solidity: function lstRestakerRegistrations(address ) view returns(bool exists, uint256 numChosen, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) LstRestakerRegistrations(opts *bind.CallOpts, arg0 common.Address) (struct {
+	Exists             bool
+	NumChosen          *big.Int
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "lstRestakerRegistrations", arg0)
+
+	outstruct := new(struct {
+		Exists             bool
+		NumChosen          *big.Int
+		DeregRequestHeight EventHeightLibEventHeight
+	})
+	if err != nil {
+		return *outstruct, err
+	}
+
+	outstruct.Exists = *abi.ConvertType(out[0], new(bool)).(*bool)
+	outstruct.NumChosen = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
+	outstruct.DeregRequestHeight = *abi.ConvertType(out[2], new(EventHeightLibEventHeight)).(*EventHeightLibEventHeight)
+
+	return *outstruct, err
+
+}
+
+// LstRestakerRegistrations is a free data retrieval call binding the contract method 0x25911aba.
+//
+// Solidity: function lstRestakerRegistrations(address ) view returns(bool exists, uint256 numChosen, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) LstRestakerRegistrations(arg0 common.Address) (struct {
+	Exists             bool
+	NumChosen          *big.Int
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	return _Mevcommitavsv3.Contract.LstRestakerRegistrations(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// LstRestakerRegistrations is a free data retrieval call binding the contract method 0x25911aba.
+//
+// Solidity: function lstRestakerRegistrations(address ) view returns(bool exists, uint256 numChosen, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) LstRestakerRegistrations(arg0 common.Address) (struct {
+	Exists             bool
+	NumChosen          *big.Int
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	return _Mevcommitavsv3.Contract.LstRestakerRegistrations(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// OperatorDeregPeriodBlocks is a free data retrieval call binding the contract method 0x14be85bd.
+//
+// Solidity: function operatorDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) OperatorDeregPeriodBlocks(opts *bind.CallOpts) (*big.Int, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "operatorDeregPeriodBlocks")
+
+	if err != nil {
+		return *new(*big.Int), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+	return out0, err
+
+}
+
+// OperatorDeregPeriodBlocks is a free data retrieval call binding the contract method 0x14be85bd.
+//
+// Solidity: function operatorDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) OperatorDeregPeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.OperatorDeregPeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// OperatorDeregPeriodBlocks is a free data retrieval call binding the contract method 0x14be85bd.
+//
+// Solidity: function operatorDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) OperatorDeregPeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.OperatorDeregPeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// OperatorRegistrations is a free data retrieval call binding the contract method 0xfe07a836.
+//
+// Solidity: function operatorRegistrations(address ) view returns(bool exists, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) OperatorRegistrations(opts *bind.CallOpts, arg0 common.Address) (struct {
+	Exists             bool
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "operatorRegistrations", arg0)
+
+	outstruct := new(struct {
+		Exists             bool
+		DeregRequestHeight EventHeightLibEventHeight
+	})
+	if err != nil {
+		return *outstruct, err
+	}
+
+	outstruct.Exists = *abi.ConvertType(out[0], new(bool)).(*bool)
+	outstruct.DeregRequestHeight = *abi.ConvertType(out[1], new(EventHeightLibEventHeight)).(*EventHeightLibEventHeight)
+
+	return *outstruct, err
+
+}
+
+// OperatorRegistrations is a free data retrieval call binding the contract method 0xfe07a836.
+//
+// Solidity: function operatorRegistrations(address ) view returns(bool exists, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) OperatorRegistrations(arg0 common.Address) (struct {
+	Exists             bool
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	return _Mevcommitavsv3.Contract.OperatorRegistrations(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// OperatorRegistrations is a free data retrieval call binding the contract method 0xfe07a836.
+//
+// Solidity: function operatorRegistrations(address ) view returns(bool exists, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) OperatorRegistrations(arg0 common.Address) (struct {
+	Exists             bool
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	return _Mevcommitavsv3.Contract.OperatorRegistrations(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
+//
+// Solidity: function owner() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) Owner(opts *bind.CallOpts) (common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "owner")
+
+	if err != nil {
+		return *new(common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+	return out0, err
+
+}
+
+// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
+//
+// Solidity: function owner() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Owner() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.Owner(&_Mevcommitavsv3.CallOpts)
+}
+
+// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
+//
+// Solidity: function owner() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) Owner() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.Owner(&_Mevcommitavsv3.CallOpts)
+}
+
+// Paused is a free data retrieval call binding the contract method 0x5c975abb.
+//
+// Solidity: function paused() view returns(bool)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) Paused(opts *bind.CallOpts) (bool, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "paused")
+
+	if err != nil {
+		return *new(bool), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+	return out0, err
+
+}
+
+// Paused is a free data retrieval call binding the contract method 0x5c975abb.
+//
+// Solidity: function paused() view returns(bool)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Paused() (bool, error) {
+	return _Mevcommitavsv3.Contract.Paused(&_Mevcommitavsv3.CallOpts)
+}
+
+// Paused is a free data retrieval call binding the contract method 0x5c975abb.
+//
+// Solidity: function paused() view returns(bool)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) Paused() (bool, error) {
+	return _Mevcommitavsv3.Contract.Paused(&_Mevcommitavsv3.CallOpts)
+}
+
+// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978.
+//
+// Solidity: function pendingOwner() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) PendingOwner(opts *bind.CallOpts) (common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "pendingOwner")
+
+	if err != nil {
+		return *new(common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+	return out0, err
+
+}
+
+// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978.
+//
+// Solidity: function pendingOwner() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) PendingOwner() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.PendingOwner(&_Mevcommitavsv3.CallOpts)
+}
+
+// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978.
+//
+// Solidity: function pendingOwner() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) PendingOwner() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.PendingOwner(&_Mevcommitavsv3.CallOpts)
+}
+
+// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d.
+//
+// Solidity: function proxiableUUID() view returns(bytes32)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "proxiableUUID")
+
+	if err != nil {
+		return *new([32]byte), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
+
+	return out0, err
+
+}
+
+// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d.
+//
+// Solidity: function proxiableUUID() view returns(bytes32)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) ProxiableUUID() ([32]byte, error) {
+	return _Mevcommitavsv3.Contract.ProxiableUUID(&_Mevcommitavsv3.CallOpts)
+}
+
+// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d.
+//
+// Solidity: function proxiableUUID() view returns(bytes32)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) ProxiableUUID() ([32]byte, error) {
+	return _Mevcommitavsv3.Contract.ProxiableUUID(&_Mevcommitavsv3.CallOpts)
+}
+
+// RestakeableStrategies is a free data retrieval call binding the contract method 0x94eef385.
+//
+// Solidity: function restakeableStrategies(uint256 ) view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) RestakeableStrategies(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "restakeableStrategies", arg0)
+
+	if err != nil {
+		return *new(common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+	return out0, err
+
+}
+
+// RestakeableStrategies is a free data retrieval call binding the contract method 0x94eef385.
+//
+// Solidity: function restakeableStrategies(uint256 ) view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RestakeableStrategies(arg0 *big.Int) (common.Address, error) {
+	return _Mevcommitavsv3.Contract.RestakeableStrategies(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// RestakeableStrategies is a free data retrieval call binding the contract method 0x94eef385.
+//
+// Solidity: function restakeableStrategies(uint256 ) view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) RestakeableStrategies(arg0 *big.Int) (common.Address, error) {
+	return _Mevcommitavsv3.Contract.RestakeableStrategies(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// UnfreezeFee is a free data retrieval call binding the contract method 0x90d0c8c2.
+//
+// Solidity: function unfreezeFee() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) UnfreezeFee(opts *bind.CallOpts) (*big.Int, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "unfreezeFee")
+
+	if err != nil {
+		return *new(*big.Int), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+	return out0, err
+
+}
+
+// UnfreezeFee is a free data retrieval call binding the contract method 0x90d0c8c2.
+//
+// Solidity: function unfreezeFee() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) UnfreezeFee() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.UnfreezeFee(&_Mevcommitavsv3.CallOpts)
+}
+
+// UnfreezeFee is a free data retrieval call binding the contract method 0x90d0c8c2.
+//
+// Solidity: function unfreezeFee() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) UnfreezeFee() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.UnfreezeFee(&_Mevcommitavsv3.CallOpts)
+}
+
+// UnfreezePeriodBlocks is a free data retrieval call binding the contract method 0x735ca5dd.
+//
+// Solidity: function unfreezePeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) UnfreezePeriodBlocks(opts *bind.CallOpts) (*big.Int, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "unfreezePeriodBlocks")
+
+	if err != nil {
+		return *new(*big.Int), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+	return out0, err
+
+}
+
+// UnfreezePeriodBlocks is a free data retrieval call binding the contract method 0x735ca5dd.
+//
+// Solidity: function unfreezePeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) UnfreezePeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.UnfreezePeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// UnfreezePeriodBlocks is a free data retrieval call binding the contract method 0x735ca5dd.
+//
+// Solidity: function unfreezePeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) UnfreezePeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.UnfreezePeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// UnfreezeReceiver is a free data retrieval call binding the contract method 0xc9207afb.
+//
+// Solidity: function unfreezeReceiver() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) UnfreezeReceiver(opts *bind.CallOpts) (common.Address, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "unfreezeReceiver")
+
+	if err != nil {
+		return *new(common.Address), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+	return out0, err
+
+}
+
+// UnfreezeReceiver is a free data retrieval call binding the contract method 0xc9207afb.
+//
+// Solidity: function unfreezeReceiver() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) UnfreezeReceiver() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.UnfreezeReceiver(&_Mevcommitavsv3.CallOpts)
+}
+
+// UnfreezeReceiver is a free data retrieval call binding the contract method 0xc9207afb.
+//
+// Solidity: function unfreezeReceiver() view returns(address)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) UnfreezeReceiver() (common.Address, error) {
+	return _Mevcommitavsv3.Contract.UnfreezeReceiver(&_Mevcommitavsv3.CallOpts)
+}
+
+// ValidatorDeregPeriodBlocks is a free data retrieval call binding the contract method 0x41a364a8.
+//
+// Solidity: function validatorDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) ValidatorDeregPeriodBlocks(opts *bind.CallOpts) (*big.Int, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "validatorDeregPeriodBlocks")
+
+	if err != nil {
+		return *new(*big.Int), err
+	}
+
+	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+	return out0, err
+
+}
+
+// ValidatorDeregPeriodBlocks is a free data retrieval call binding the contract method 0x41a364a8.
+//
+// Solidity: function validatorDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) ValidatorDeregPeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.ValidatorDeregPeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// ValidatorDeregPeriodBlocks is a free data retrieval call binding the contract method 0x41a364a8.
+//
+// Solidity: function validatorDeregPeriodBlocks() view returns(uint256)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) ValidatorDeregPeriodBlocks() (*big.Int, error) {
+	return _Mevcommitavsv3.Contract.ValidatorDeregPeriodBlocks(&_Mevcommitavsv3.CallOpts)
+}
+
+// ValidatorRegistrations is a free data retrieval call binding the contract method 0x8cdaf000.
+//
+// Solidity: function validatorRegistrations(bytes ) view returns(bool exists, address podOwner, (bool,uint256) freezeHeight, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3Caller) ValidatorRegistrations(opts *bind.CallOpts, arg0 []byte) (struct {
+	Exists             bool
+	PodOwner           common.Address
+	FreezeHeight       EventHeightLibEventHeight
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	var out []interface{}
+	err := _Mevcommitavsv3.contract.Call(opts, &out, "validatorRegistrations", arg0)
+
+	outstruct := new(struct {
+		Exists             bool
+		PodOwner           common.Address
+		FreezeHeight       EventHeightLibEventHeight
+		DeregRequestHeight EventHeightLibEventHeight
+	})
+	if err != nil {
+		return *outstruct, err
+	}
+
+	outstruct.Exists = *abi.ConvertType(out[0], new(bool)).(*bool)
+	outstruct.PodOwner = *abi.ConvertType(out[1], new(common.Address)).(*common.Address)
+	outstruct.FreezeHeight = *abi.ConvertType(out[2], new(EventHeightLibEventHeight)).(*EventHeightLibEventHeight)
+	outstruct.DeregRequestHeight = *abi.ConvertType(out[3], new(EventHeightLibEventHeight)).(*EventHeightLibEventHeight)
+
+	return *outstruct, err
+
+}
+
+// ValidatorRegistrations is a free data retrieval call binding the contract method 0x8cdaf000.
+//
+// Solidity: function validatorRegistrations(bytes ) view returns(bool exists, address podOwner, (bool,uint256) freezeHeight, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) ValidatorRegistrations(arg0 []byte) (struct {
+	Exists             bool
+	PodOwner           common.Address
+	FreezeHeight       EventHeightLibEventHeight
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	return _Mevcommitavsv3.Contract.ValidatorRegistrations(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// ValidatorRegistrations is a free data retrieval call binding the contract method 0x8cdaf000.
+//
+// Solidity: function validatorRegistrations(bytes ) view returns(bool exists, address podOwner, (bool,uint256) freezeHeight, (bool,uint256) deregRequestHeight)
+func (_Mevcommitavsv3 *Mevcommitavsv3CallerSession) ValidatorRegistrations(arg0 []byte) (struct {
+	Exists             bool
+	PodOwner           common.Address
+	FreezeHeight       EventHeightLibEventHeight
+	DeregRequestHeight EventHeightLibEventHeight
+}, error) {
+	return _Mevcommitavsv3.Contract.ValidatorRegistrations(&_Mevcommitavsv3.CallOpts, arg0)
+}
+
+// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097.
+//
+// Solidity: function acceptOwnership() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "acceptOwnership")
+}
+
+// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097.
+//
+// Solidity: function acceptOwnership() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) AcceptOwnership() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.AcceptOwnership(&_Mevcommitavsv3.TransactOpts)
+}
+
+// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097.
+//
+// Solidity: function acceptOwnership() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) AcceptOwnership() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.AcceptOwnership(&_Mevcommitavsv3.TransactOpts)
+}
+
+// DeregisterLSTRestaker is a paid mutator transaction binding the contract method 0x4ad29427.
+//
+// Solidity: function deregisterLSTRestaker() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) DeregisterLSTRestaker(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "deregisterLSTRestaker")
+}
+
+// DeregisterLSTRestaker is a paid mutator transaction binding the contract method 0x4ad29427.
+//
+// Solidity: function deregisterLSTRestaker() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) DeregisterLSTRestaker() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.DeregisterLSTRestaker(&_Mevcommitavsv3.TransactOpts)
+}
+
+// DeregisterLSTRestaker is a paid mutator transaction binding the contract method 0x4ad29427.
+//
+// Solidity: function deregisterLSTRestaker() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) DeregisterLSTRestaker() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.DeregisterLSTRestaker(&_Mevcommitavsv3.TransactOpts)
+}
+
+// DeregisterOperator is a paid mutator transaction binding the contract method 0xd8cf98ca.
+//
+// Solidity: function deregisterOperator(address operator) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) DeregisterOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "deregisterOperator", operator)
+}
+
+// DeregisterOperator is a paid mutator transaction binding the contract method 0xd8cf98ca.
+//
+// Solidity: function deregisterOperator(address operator) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) DeregisterOperator(operator common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.DeregisterOperator(&_Mevcommitavsv3.TransactOpts, operator)
+}
+
+// DeregisterOperator is a paid mutator transaction binding the contract method 0xd8cf98ca.
+//
+// Solidity: function deregisterOperator(address operator) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) DeregisterOperator(operator common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.DeregisterOperator(&_Mevcommitavsv3.TransactOpts, operator)
+}
+
+// DeregisterValidators is a paid mutator transaction binding the contract method 0xc6c6a657.
+//
+// Solidity: function deregisterValidators(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) DeregisterValidators(opts *bind.TransactOpts, valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "deregisterValidators", valPubKeys)
+}
+
+// DeregisterValidators is a paid mutator transaction binding the contract method 0xc6c6a657.
+//
+// Solidity: function deregisterValidators(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) DeregisterValidators(valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.DeregisterValidators(&_Mevcommitavsv3.TransactOpts, valPubKeys)
+}
+
+// DeregisterValidators is a paid mutator transaction binding the contract method 0xc6c6a657.
+//
+// Solidity: function deregisterValidators(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) DeregisterValidators(valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.DeregisterValidators(&_Mevcommitavsv3.TransactOpts, valPubKeys)
+}
+
+// Freeze is a paid mutator transaction binding the contract method 0xa694d33f.
+//
+// Solidity: function freeze(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) Freeze(opts *bind.TransactOpts, valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "freeze", valPubKeys)
+}
+
+// Freeze is a paid mutator transaction binding the contract method 0xa694d33f.
+//
+// Solidity: function freeze(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Freeze(valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Freeze(&_Mevcommitavsv3.TransactOpts, valPubKeys)
+}
+
+// Freeze is a paid mutator transaction binding the contract method 0xa694d33f.
+//
+// Solidity: function freeze(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) Freeze(valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Freeze(&_Mevcommitavsv3.TransactOpts, valPubKeys)
+}
+
+// Initialize is a paid mutator transaction binding the contract method 0x78a69cd4.
+//
+// Solidity: function initialize(address owner_, address delegationManager_, address eigenPodManager_, address strategyManager_, address avsDirectory_, address[] restakeableStrategies_, address freezeOracle_, uint256 unfreezeFee_, address unfreezeReceiver_, uint256 unfreezePeriodBlocks_, uint256 operatorDeregPeriodBlocks_, uint256 validatorDeregPeriodBlocks_, uint256 lstRestakerDeregPeriodBlocks_, string metadataURI_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) Initialize(opts *bind.TransactOpts, owner_ common.Address, delegationManager_ common.Address, eigenPodManager_ common.Address, strategyManager_ common.Address, avsDirectory_ common.Address, restakeableStrategies_ []common.Address, freezeOracle_ common.Address, unfreezeFee_ *big.Int, unfreezeReceiver_ common.Address, unfreezePeriodBlocks_ *big.Int, operatorDeregPeriodBlocks_ *big.Int, validatorDeregPeriodBlocks_ *big.Int, lstRestakerDeregPeriodBlocks_ *big.Int, metadataURI_ string) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "initialize", owner_, delegationManager_, eigenPodManager_, strategyManager_, avsDirectory_, restakeableStrategies_, freezeOracle_, unfreezeFee_, unfreezeReceiver_, unfreezePeriodBlocks_, operatorDeregPeriodBlocks_, validatorDeregPeriodBlocks_, lstRestakerDeregPeriodBlocks_, metadataURI_)
+}
+
+// Initialize is a paid mutator transaction binding the contract method 0x78a69cd4.
+//
+// Solidity: function initialize(address owner_, address delegationManager_, address eigenPodManager_, address strategyManager_, address avsDirectory_, address[] restakeableStrategies_, address freezeOracle_, uint256 unfreezeFee_, address unfreezeReceiver_, uint256 unfreezePeriodBlocks_, uint256 operatorDeregPeriodBlocks_, uint256 validatorDeregPeriodBlocks_, uint256 lstRestakerDeregPeriodBlocks_, string metadataURI_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Initialize(owner_ common.Address, delegationManager_ common.Address, eigenPodManager_ common.Address, strategyManager_ common.Address, avsDirectory_ common.Address, restakeableStrategies_ []common.Address, freezeOracle_ common.Address, unfreezeFee_ *big.Int, unfreezeReceiver_ common.Address, unfreezePeriodBlocks_ *big.Int, operatorDeregPeriodBlocks_ *big.Int, validatorDeregPeriodBlocks_ *big.Int, lstRestakerDeregPeriodBlocks_ *big.Int, metadataURI_ string) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Initialize(&_Mevcommitavsv3.TransactOpts, owner_, delegationManager_, eigenPodManager_, strategyManager_, avsDirectory_, restakeableStrategies_, freezeOracle_, unfreezeFee_, unfreezeReceiver_, unfreezePeriodBlocks_, operatorDeregPeriodBlocks_, validatorDeregPeriodBlocks_, lstRestakerDeregPeriodBlocks_, metadataURI_)
+}
+
+// Initialize is a paid mutator transaction binding the contract method 0x78a69cd4.
+//
+// Solidity: function initialize(address owner_, address delegationManager_, address eigenPodManager_, address strategyManager_, address avsDirectory_, address[] restakeableStrategies_, address freezeOracle_, uint256 unfreezeFee_, address unfreezeReceiver_, uint256 unfreezePeriodBlocks_, uint256 operatorDeregPeriodBlocks_, uint256 validatorDeregPeriodBlocks_, uint256 lstRestakerDeregPeriodBlocks_, string metadataURI_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) Initialize(owner_ common.Address, delegationManager_ common.Address, eigenPodManager_ common.Address, strategyManager_ common.Address, avsDirectory_ common.Address, restakeableStrategies_ []common.Address, freezeOracle_ common.Address, unfreezeFee_ *big.Int, unfreezeReceiver_ common.Address, unfreezePeriodBlocks_ *big.Int, operatorDeregPeriodBlocks_ *big.Int, validatorDeregPeriodBlocks_ *big.Int, lstRestakerDeregPeriodBlocks_ *big.Int, metadataURI_ string) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Initialize(&_Mevcommitavsv3.TransactOpts, owner_, delegationManager_, eigenPodManager_, strategyManager_, avsDirectory_, restakeableStrategies_, freezeOracle_, unfreezeFee_, unfreezeReceiver_, unfreezePeriodBlocks_, operatorDeregPeriodBlocks_, validatorDeregPeriodBlocks_, lstRestakerDeregPeriodBlocks_, metadataURI_)
+}
+
+// Pause is a paid mutator transaction binding the contract method 0x8456cb59.
+//
+// Solidity: function pause() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "pause")
+}
+
+// Pause is a paid mutator transaction binding the contract method 0x8456cb59.
+//
+// Solidity: function pause() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Pause() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Pause(&_Mevcommitavsv3.TransactOpts)
+}
+
+// Pause is a paid mutator transaction binding the contract method 0x8456cb59.
+//
+// Solidity: function pause() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) Pause() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Pause(&_Mevcommitavsv3.TransactOpts)
+}
+
+// RegisterLSTRestaker is a paid mutator transaction binding the contract method 0xa807a70e.
+//
+// Solidity: function registerLSTRestaker(bytes[] chosenValidators) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) RegisterLSTRestaker(opts *bind.TransactOpts, chosenValidators [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "registerLSTRestaker", chosenValidators)
+}
+
+// RegisterLSTRestaker is a paid mutator transaction binding the contract method 0xa807a70e.
+//
+// Solidity: function registerLSTRestaker(bytes[] chosenValidators) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RegisterLSTRestaker(chosenValidators [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RegisterLSTRestaker(&_Mevcommitavsv3.TransactOpts, chosenValidators)
+}
+
+// RegisterLSTRestaker is a paid mutator transaction binding the contract method 0xa807a70e.
+//
+// Solidity: function registerLSTRestaker(bytes[] chosenValidators) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) RegisterLSTRestaker(chosenValidators [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RegisterLSTRestaker(&_Mevcommitavsv3.TransactOpts, chosenValidators)
+}
+
+// RegisterOperator is a paid mutator transaction binding the contract method 0x8317781d.
+//
+// Solidity: function registerOperator((bytes,bytes32,uint256) operatorSignature) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) RegisterOperator(opts *bind.TransactOpts, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "registerOperator", operatorSignature)
+}
+
+// RegisterOperator is a paid mutator transaction binding the contract method 0x8317781d.
+//
+// Solidity: function registerOperator((bytes,bytes32,uint256) operatorSignature) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RegisterOperator(operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RegisterOperator(&_Mevcommitavsv3.TransactOpts, operatorSignature)
+}
+
+// RegisterOperator is a paid mutator transaction binding the contract method 0x8317781d.
+//
+// Solidity: function registerOperator((bytes,bytes32,uint256) operatorSignature) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) RegisterOperator(operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RegisterOperator(&_Mevcommitavsv3.TransactOpts, operatorSignature)
+}
+
+// RegisterValidatorsByPodOwners is a paid mutator transaction binding the contract method 0x86566f96.
+//
+// Solidity: function registerValidatorsByPodOwners(bytes[][] valPubKeys, address[] podOwners) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) RegisterValidatorsByPodOwners(opts *bind.TransactOpts, valPubKeys [][][]byte, podOwners []common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "registerValidatorsByPodOwners", valPubKeys, podOwners)
+}
+
+// RegisterValidatorsByPodOwners is a paid mutator transaction binding the contract method 0x86566f96.
+//
+// Solidity: function registerValidatorsByPodOwners(bytes[][] valPubKeys, address[] podOwners) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RegisterValidatorsByPodOwners(valPubKeys [][][]byte, podOwners []common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RegisterValidatorsByPodOwners(&_Mevcommitavsv3.TransactOpts, valPubKeys, podOwners)
+}
+
+// RegisterValidatorsByPodOwners is a paid mutator transaction binding the contract method 0x86566f96.
+//
+// Solidity: function registerValidatorsByPodOwners(bytes[][] valPubKeys, address[] podOwners) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) RegisterValidatorsByPodOwners(valPubKeys [][][]byte, podOwners []common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RegisterValidatorsByPodOwners(&_Mevcommitavsv3.TransactOpts, valPubKeys, podOwners)
+}
+
+// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
+//
+// Solidity: function renounceOwnership() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "renounceOwnership")
+}
+
+// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
+//
+// Solidity: function renounceOwnership() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RenounceOwnership() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RenounceOwnership(&_Mevcommitavsv3.TransactOpts)
+}
+
+// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
+//
+// Solidity: function renounceOwnership() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) RenounceOwnership() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RenounceOwnership(&_Mevcommitavsv3.TransactOpts)
+}
+
+// RequestLSTRestakerDeregistration is a paid mutator transaction binding the contract method 0x6e7a0e1f.
+//
+// Solidity: function requestLSTRestakerDeregistration() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) RequestLSTRestakerDeregistration(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "requestLSTRestakerDeregistration")
+}
+
+// RequestLSTRestakerDeregistration is a paid mutator transaction binding the contract method 0x6e7a0e1f.
+//
+// Solidity: function requestLSTRestakerDeregistration() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RequestLSTRestakerDeregistration() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RequestLSTRestakerDeregistration(&_Mevcommitavsv3.TransactOpts)
+}
+
+// RequestLSTRestakerDeregistration is a paid mutator transaction binding the contract method 0x6e7a0e1f.
+//
+// Solidity: function requestLSTRestakerDeregistration() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) RequestLSTRestakerDeregistration() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RequestLSTRestakerDeregistration(&_Mevcommitavsv3.TransactOpts)
+}
+
+// RequestOperatorDeregistration is a paid mutator transaction binding the contract method 0x95f8451b.
+//
+// Solidity: function requestOperatorDeregistration(address operator) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) RequestOperatorDeregistration(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "requestOperatorDeregistration", operator)
+}
+
+// RequestOperatorDeregistration is a paid mutator transaction binding the contract method 0x95f8451b.
+//
+// Solidity: function requestOperatorDeregistration(address operator) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RequestOperatorDeregistration(operator common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RequestOperatorDeregistration(&_Mevcommitavsv3.TransactOpts, operator)
+}
+
+// RequestOperatorDeregistration is a paid mutator transaction binding the contract method 0x95f8451b.
+//
+// Solidity: function requestOperatorDeregistration(address operator) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) RequestOperatorDeregistration(operator common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RequestOperatorDeregistration(&_Mevcommitavsv3.TransactOpts, operator)
+}
+
+// RequestValidatorsDeregistration is a paid mutator transaction binding the contract method 0xeb35369b.
+//
+// Solidity: function requestValidatorsDeregistration(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) RequestValidatorsDeregistration(opts *bind.TransactOpts, valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "requestValidatorsDeregistration", valPubKeys)
+}
+
+// RequestValidatorsDeregistration is a paid mutator transaction binding the contract method 0xeb35369b.
+//
+// Solidity: function requestValidatorsDeregistration(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) RequestValidatorsDeregistration(valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RequestValidatorsDeregistration(&_Mevcommitavsv3.TransactOpts, valPubKeys)
+}
+
+// RequestValidatorsDeregistration is a paid mutator transaction binding the contract method 0xeb35369b.
+//
+// Solidity: function requestValidatorsDeregistration(bytes[] valPubKeys) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) RequestValidatorsDeregistration(valPubKeys [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.RequestValidatorsDeregistration(&_Mevcommitavsv3.TransactOpts, valPubKeys)
+}
+
+// SetAVSDirectory is a paid mutator transaction binding the contract method 0x862621ef.
+//
+// Solidity: function setAVSDirectory(address avsDirectory_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetAVSDirectory(opts *bind.TransactOpts, avsDirectory_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setAVSDirectory", avsDirectory_)
+}
+
+// SetAVSDirectory is a paid mutator transaction binding the contract method 0x862621ef.
+//
+// Solidity: function setAVSDirectory(address avsDirectory_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetAVSDirectory(avsDirectory_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetAVSDirectory(&_Mevcommitavsv3.TransactOpts, avsDirectory_)
+}
+
+// SetAVSDirectory is a paid mutator transaction binding the contract method 0x862621ef.
+//
+// Solidity: function setAVSDirectory(address avsDirectory_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetAVSDirectory(avsDirectory_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetAVSDirectory(&_Mevcommitavsv3.TransactOpts, avsDirectory_)
+}
+
+// SetDelegationManager is a paid mutator transaction binding the contract method 0x1a8d0de2.
+//
+// Solidity: function setDelegationManager(address delegationManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetDelegationManager(opts *bind.TransactOpts, delegationManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setDelegationManager", delegationManager_)
+}
+
+// SetDelegationManager is a paid mutator transaction binding the contract method 0x1a8d0de2.
+//
+// Solidity: function setDelegationManager(address delegationManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetDelegationManager(delegationManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetDelegationManager(&_Mevcommitavsv3.TransactOpts, delegationManager_)
+}
+
+// SetDelegationManager is a paid mutator transaction binding the contract method 0x1a8d0de2.
+//
+// Solidity: function setDelegationManager(address delegationManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetDelegationManager(delegationManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetDelegationManager(&_Mevcommitavsv3.TransactOpts, delegationManager_)
+}
+
+// SetEigenPodManager is a paid mutator transaction binding the contract method 0x3c2adfde.
+//
+// Solidity: function setEigenPodManager(address eigenPodManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetEigenPodManager(opts *bind.TransactOpts, eigenPodManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setEigenPodManager", eigenPodManager_)
+}
+
+// SetEigenPodManager is a paid mutator transaction binding the contract method 0x3c2adfde.
+//
+// Solidity: function setEigenPodManager(address eigenPodManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetEigenPodManager(eigenPodManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetEigenPodManager(&_Mevcommitavsv3.TransactOpts, eigenPodManager_)
+}
+
+// SetEigenPodManager is a paid mutator transaction binding the contract method 0x3c2adfde.
+//
+// Solidity: function setEigenPodManager(address eigenPodManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetEigenPodManager(eigenPodManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetEigenPodManager(&_Mevcommitavsv3.TransactOpts, eigenPodManager_)
+}
+
+// SetFreezeOracle is a paid mutator transaction binding the contract method 0x65a49071.
+//
+// Solidity: function setFreezeOracle(address freezeOracle_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetFreezeOracle(opts *bind.TransactOpts, freezeOracle_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setFreezeOracle", freezeOracle_)
+}
+
+// SetFreezeOracle is a paid mutator transaction binding the contract method 0x65a49071.
+//
+// Solidity: function setFreezeOracle(address freezeOracle_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetFreezeOracle(freezeOracle_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetFreezeOracle(&_Mevcommitavsv3.TransactOpts, freezeOracle_)
+}
+
+// SetFreezeOracle is a paid mutator transaction binding the contract method 0x65a49071.
+//
+// Solidity: function setFreezeOracle(address freezeOracle_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetFreezeOracle(freezeOracle_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetFreezeOracle(&_Mevcommitavsv3.TransactOpts, freezeOracle_)
+}
+
+// SetLstRestakerDeregPeriodBlocks is a paid mutator transaction binding the contract method 0x62f3dedb.
+//
+// Solidity: function setLstRestakerDeregPeriodBlocks(uint256 lstRestakerDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetLstRestakerDeregPeriodBlocks(opts *bind.TransactOpts, lstRestakerDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setLstRestakerDeregPeriodBlocks", lstRestakerDeregPeriodBlocks_)
+}
+
+// SetLstRestakerDeregPeriodBlocks is a paid mutator transaction binding the contract method 0x62f3dedb.
+//
+// Solidity: function setLstRestakerDeregPeriodBlocks(uint256 lstRestakerDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetLstRestakerDeregPeriodBlocks(lstRestakerDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetLstRestakerDeregPeriodBlocks(&_Mevcommitavsv3.TransactOpts, lstRestakerDeregPeriodBlocks_)
+}
+
+// SetLstRestakerDeregPeriodBlocks is a paid mutator transaction binding the contract method 0x62f3dedb.
+//
+// Solidity: function setLstRestakerDeregPeriodBlocks(uint256 lstRestakerDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetLstRestakerDeregPeriodBlocks(lstRestakerDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetLstRestakerDeregPeriodBlocks(&_Mevcommitavsv3.TransactOpts, lstRestakerDeregPeriodBlocks_)
+}
+
+// SetOperatorDeregPeriodBlocks is a paid mutator transaction binding the contract method 0xedfb9d0d.
+//
+// Solidity: function setOperatorDeregPeriodBlocks(uint256 operatorDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetOperatorDeregPeriodBlocks(opts *bind.TransactOpts, operatorDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setOperatorDeregPeriodBlocks", operatorDeregPeriodBlocks_)
+}
+
+// SetOperatorDeregPeriodBlocks is a paid mutator transaction binding the contract method 0xedfb9d0d.
+//
+// Solidity: function setOperatorDeregPeriodBlocks(uint256 operatorDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetOperatorDeregPeriodBlocks(operatorDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetOperatorDeregPeriodBlocks(&_Mevcommitavsv3.TransactOpts, operatorDeregPeriodBlocks_)
+}
+
+// SetOperatorDeregPeriodBlocks is a paid mutator transaction binding the contract method 0xedfb9d0d.
+//
+// Solidity: function setOperatorDeregPeriodBlocks(uint256 operatorDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetOperatorDeregPeriodBlocks(operatorDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetOperatorDeregPeriodBlocks(&_Mevcommitavsv3.TransactOpts, operatorDeregPeriodBlocks_)
+}
+
+// SetRestakeableStrategies is a paid mutator transaction binding the contract method 0xd871d570.
+//
+// Solidity: function setRestakeableStrategies(address[] restakeableStrategies_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetRestakeableStrategies(opts *bind.TransactOpts, restakeableStrategies_ []common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setRestakeableStrategies", restakeableStrategies_)
+}
+
+// SetRestakeableStrategies is a paid mutator transaction binding the contract method 0xd871d570.
+//
+// Solidity: function setRestakeableStrategies(address[] restakeableStrategies_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetRestakeableStrategies(restakeableStrategies_ []common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetRestakeableStrategies(&_Mevcommitavsv3.TransactOpts, restakeableStrategies_)
+}
+
+// SetRestakeableStrategies is a paid mutator transaction binding the contract method 0xd871d570.
+//
+// Solidity: function setRestakeableStrategies(address[] restakeableStrategies_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetRestakeableStrategies(restakeableStrategies_ []common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetRestakeableStrategies(&_Mevcommitavsv3.TransactOpts, restakeableStrategies_)
+}
+
+// SetStrategyManager is a paid mutator transaction binding the contract method 0x5c966646.
+//
+// Solidity: function setStrategyManager(address strategyManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetStrategyManager(opts *bind.TransactOpts, strategyManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setStrategyManager", strategyManager_)
+}
+
+// SetStrategyManager is a paid mutator transaction binding the contract method 0x5c966646.
+//
+// Solidity: function setStrategyManager(address strategyManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetStrategyManager(strategyManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetStrategyManager(&_Mevcommitavsv3.TransactOpts, strategyManager_)
+}
+
+// SetStrategyManager is a paid mutator transaction binding the contract method 0x5c966646.
+//
+// Solidity: function setStrategyManager(address strategyManager_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetStrategyManager(strategyManager_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetStrategyManager(&_Mevcommitavsv3.TransactOpts, strategyManager_)
+}
+
+// SetUnfreezeFee is a paid mutator transaction binding the contract method 0x80e7751c.
+//
+// Solidity: function setUnfreezeFee(uint256 unfreezeFee_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetUnfreezeFee(opts *bind.TransactOpts, unfreezeFee_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setUnfreezeFee", unfreezeFee_)
+}
+
+// SetUnfreezeFee is a paid mutator transaction binding the contract method 0x80e7751c.
+//
+// Solidity: function setUnfreezeFee(uint256 unfreezeFee_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetUnfreezeFee(unfreezeFee_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetUnfreezeFee(&_Mevcommitavsv3.TransactOpts, unfreezeFee_)
+}
+
+// SetUnfreezeFee is a paid mutator transaction binding the contract method 0x80e7751c.
+//
+// Solidity: function setUnfreezeFee(uint256 unfreezeFee_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetUnfreezeFee(unfreezeFee_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetUnfreezeFee(&_Mevcommitavsv3.TransactOpts, unfreezeFee_)
+}
+
+// SetUnfreezePeriodBlocks is a paid mutator transaction binding the contract method 0x86c823e0.
+//
+// Solidity: function setUnfreezePeriodBlocks(uint256 unfreezePeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetUnfreezePeriodBlocks(opts *bind.TransactOpts, unfreezePeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setUnfreezePeriodBlocks", unfreezePeriodBlocks_)
+}
+
+// SetUnfreezePeriodBlocks is a paid mutator transaction binding the contract method 0x86c823e0.
+//
+// Solidity: function setUnfreezePeriodBlocks(uint256 unfreezePeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetUnfreezePeriodBlocks(unfreezePeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetUnfreezePeriodBlocks(&_Mevcommitavsv3.TransactOpts, unfreezePeriodBlocks_)
+}
+
+// SetUnfreezePeriodBlocks is a paid mutator transaction binding the contract method 0x86c823e0.
+//
+// Solidity: function setUnfreezePeriodBlocks(uint256 unfreezePeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetUnfreezePeriodBlocks(unfreezePeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetUnfreezePeriodBlocks(&_Mevcommitavsv3.TransactOpts, unfreezePeriodBlocks_)
+}
+
+// SetUnfreezeReceiver is a paid mutator transaction binding the contract method 0x7d0b802d.
+//
+// Solidity: function setUnfreezeReceiver(address unfreezeReceiver_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetUnfreezeReceiver(opts *bind.TransactOpts, unfreezeReceiver_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setUnfreezeReceiver", unfreezeReceiver_)
+}
+
+// SetUnfreezeReceiver is a paid mutator transaction binding the contract method 0x7d0b802d.
+//
+// Solidity: function setUnfreezeReceiver(address unfreezeReceiver_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetUnfreezeReceiver(unfreezeReceiver_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetUnfreezeReceiver(&_Mevcommitavsv3.TransactOpts, unfreezeReceiver_)
+}
+
+// SetUnfreezeReceiver is a paid mutator transaction binding the contract method 0x7d0b802d.
+//
+// Solidity: function setUnfreezeReceiver(address unfreezeReceiver_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetUnfreezeReceiver(unfreezeReceiver_ common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetUnfreezeReceiver(&_Mevcommitavsv3.TransactOpts, unfreezeReceiver_)
+}
+
+// SetValidatorDeregPeriodBlocks is a paid mutator transaction binding the contract method 0xb20bbf0a.
+//
+// Solidity: function setValidatorDeregPeriodBlocks(uint256 validatorDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) SetValidatorDeregPeriodBlocks(opts *bind.TransactOpts, validatorDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "setValidatorDeregPeriodBlocks", validatorDeregPeriodBlocks_)
+}
+
+// SetValidatorDeregPeriodBlocks is a paid mutator transaction binding the contract method 0xb20bbf0a.
+//
+// Solidity: function setValidatorDeregPeriodBlocks(uint256 validatorDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) SetValidatorDeregPeriodBlocks(validatorDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetValidatorDeregPeriodBlocks(&_Mevcommitavsv3.TransactOpts, validatorDeregPeriodBlocks_)
+}
+
+// SetValidatorDeregPeriodBlocks is a paid mutator transaction binding the contract method 0xb20bbf0a.
+//
+// Solidity: function setValidatorDeregPeriodBlocks(uint256 validatorDeregPeriodBlocks_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) SetValidatorDeregPeriodBlocks(validatorDeregPeriodBlocks_ *big.Int) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.SetValidatorDeregPeriodBlocks(&_Mevcommitavsv3.TransactOpts, validatorDeregPeriodBlocks_)
+}
+
+// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
+//
+// Solidity: function transferOwnership(address newOwner) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "transferOwnership", newOwner)
+}
+
+// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
+//
+// Solidity: function transferOwnership(address newOwner) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.TransferOwnership(&_Mevcommitavsv3.TransactOpts, newOwner)
+}
+
+// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
+//
+// Solidity: function transferOwnership(address newOwner) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.TransferOwnership(&_Mevcommitavsv3.TransactOpts, newOwner)
+}
+
+// Unfreeze is a paid mutator transaction binding the contract method 0xb764d33c.
+//
+// Solidity: function unfreeze(bytes[] valPubKey) payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) Unfreeze(opts *bind.TransactOpts, valPubKey [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "unfreeze", valPubKey)
+}
+
+// Unfreeze is a paid mutator transaction binding the contract method 0xb764d33c.
+//
+// Solidity: function unfreeze(bytes[] valPubKey) payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Unfreeze(valPubKey [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Unfreeze(&_Mevcommitavsv3.TransactOpts, valPubKey)
+}
+
+// Unfreeze is a paid mutator transaction binding the contract method 0xb764d33c.
+//
+// Solidity: function unfreeze(bytes[] valPubKey) payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) Unfreeze(valPubKey [][]byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Unfreeze(&_Mevcommitavsv3.TransactOpts, valPubKey)
+}
+
+// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a.
+//
+// Solidity: function unpause() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "unpause")
+}
+
+// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a.
+//
+// Solidity: function unpause() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Unpause() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Unpause(&_Mevcommitavsv3.TransactOpts)
+}
+
+// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a.
+//
+// Solidity: function unpause() returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) Unpause() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Unpause(&_Mevcommitavsv3.TransactOpts)
+}
+
+// UpdateMetadataURI is a paid mutator transaction binding the contract method 0x53fd3e81.
+//
+// Solidity: function updateMetadataURI(string metadataURI_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) UpdateMetadataURI(opts *bind.TransactOpts, metadataURI_ string) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "updateMetadataURI", metadataURI_)
+}
+
+// UpdateMetadataURI is a paid mutator transaction binding the contract method 0x53fd3e81.
+//
+// Solidity: function updateMetadataURI(string metadataURI_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) UpdateMetadataURI(metadataURI_ string) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.UpdateMetadataURI(&_Mevcommitavsv3.TransactOpts, metadataURI_)
+}
+
+// UpdateMetadataURI is a paid mutator transaction binding the contract method 0x53fd3e81.
+//
+// Solidity: function updateMetadataURI(string metadataURI_) returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) UpdateMetadataURI(metadataURI_ string) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.UpdateMetadataURI(&_Mevcommitavsv3.TransactOpts, metadataURI_)
+}
+
+// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286.
+//
+// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.Transact(opts, "upgradeToAndCall", newImplementation, data)
+}
+
+// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286.
+//
+// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.UpgradeToAndCall(&_Mevcommitavsv3.TransactOpts, newImplementation, data)
+}
+
+// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286.
+//
+// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.UpgradeToAndCall(&_Mevcommitavsv3.TransactOpts, newImplementation, data)
+}
+
+// Fallback is a paid mutator transaction binding the contract fallback function.
+//
+// Solidity: fallback() payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.RawTransact(opts, calldata)
+}
+
+// Fallback is a paid mutator transaction binding the contract fallback function.
+//
+// Solidity: fallback() payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Fallback(calldata []byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Fallback(&_Mevcommitavsv3.TransactOpts, calldata)
+}
+
+// Fallback is a paid mutator transaction binding the contract fallback function.
+//
+// Solidity: fallback() payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Fallback(&_Mevcommitavsv3.TransactOpts, calldata)
+}
+
+// Receive is a paid mutator transaction binding the contract receive function.
+//
+// Solidity: receive() payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
+	return _Mevcommitavsv3.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
+}
+
+// Receive is a paid mutator transaction binding the contract receive function.
+//
+// Solidity: receive() payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3Session) Receive() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Receive(&_Mevcommitavsv3.TransactOpts)
+}
+
+// Receive is a paid mutator transaction binding the contract receive function.
+//
+// Solidity: receive() payable returns()
+func (_Mevcommitavsv3 *Mevcommitavsv3TransactorSession) Receive() (*types.Transaction, error) {
+	return _Mevcommitavsv3.Contract.Receive(&_Mevcommitavsv3.TransactOpts)
+}
+
+// Mevcommitavsv3AVSDirectorySetIterator is returned from FilterAVSDirectorySet and is used to iterate over the raw logs and unpacked data for AVSDirectorySet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3AVSDirectorySetIterator struct {
+	Event *Mevcommitavsv3AVSDirectorySet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3AVSDirectorySetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3AVSDirectorySet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3AVSDirectorySet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3AVSDirectorySetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3AVSDirectorySetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3AVSDirectorySet represents a AVSDirectorySet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3AVSDirectorySet struct {
+	AvsDirectory common.Address
+	Raw          types.Log // Blockchain specific contextual infos
+}
+
+// FilterAVSDirectorySet is a free log retrieval operation binding the contract event 0x934223b20c24d569ff89796ae10a6997d43e2b3df0c3677fb6ca1f6e37ce344b.
+//
+// Solidity: event AVSDirectorySet(address indexed avsDirectory)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterAVSDirectorySet(opts *bind.FilterOpts, avsDirectory []common.Address) (*Mevcommitavsv3AVSDirectorySetIterator, error) {
+
+	var avsDirectoryRule []interface{}
+	for _, avsDirectoryItem := range avsDirectory {
+		avsDirectoryRule = append(avsDirectoryRule, avsDirectoryItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "AVSDirectorySet", avsDirectoryRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3AVSDirectorySetIterator{contract: _Mevcommitavsv3.contract, event: "AVSDirectorySet", logs: logs, sub: sub}, nil
+}
+
+// WatchAVSDirectorySet is a free log subscription operation binding the contract event 0x934223b20c24d569ff89796ae10a6997d43e2b3df0c3677fb6ca1f6e37ce344b.
+//
+// Solidity: event AVSDirectorySet(address indexed avsDirectory)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchAVSDirectorySet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3AVSDirectorySet, avsDirectory []common.Address) (event.Subscription, error) {
+
+	var avsDirectoryRule []interface{}
+	for _, avsDirectoryItem := range avsDirectory {
+		avsDirectoryRule = append(avsDirectoryRule, avsDirectoryItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "AVSDirectorySet", avsDirectoryRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3AVSDirectorySet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "AVSDirectorySet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseAVSDirectorySet is a log parse operation binding the contract event 0x934223b20c24d569ff89796ae10a6997d43e2b3df0c3677fb6ca1f6e37ce344b.
+//
+// Solidity: event AVSDirectorySet(address indexed avsDirectory)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseAVSDirectorySet(log types.Log) (*Mevcommitavsv3AVSDirectorySet, error) {
+	event := new(Mevcommitavsv3AVSDirectorySet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "AVSDirectorySet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3DelegationManagerSetIterator is returned from FilterDelegationManagerSet and is used to iterate over the raw logs and unpacked data for DelegationManagerSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3DelegationManagerSetIterator struct {
+	Event *Mevcommitavsv3DelegationManagerSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3DelegationManagerSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3DelegationManagerSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3DelegationManagerSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3DelegationManagerSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3DelegationManagerSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3DelegationManagerSet represents a DelegationManagerSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3DelegationManagerSet struct {
+	DelegationManager common.Address
+	Raw               types.Log // Blockchain specific contextual infos
+}
+
+// FilterDelegationManagerSet is a free log retrieval operation binding the contract event 0x2296e6d8aebb5c81250fd381a114c2ec346fc44bc4582ba95cdcac0f09df6cd9.
+//
+// Solidity: event DelegationManagerSet(address indexed delegationManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterDelegationManagerSet(opts *bind.FilterOpts, delegationManager []common.Address) (*Mevcommitavsv3DelegationManagerSetIterator, error) {
+
+	var delegationManagerRule []interface{}
+	for _, delegationManagerItem := range delegationManager {
+		delegationManagerRule = append(delegationManagerRule, delegationManagerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "DelegationManagerSet", delegationManagerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3DelegationManagerSetIterator{contract: _Mevcommitavsv3.contract, event: "DelegationManagerSet", logs: logs, sub: sub}, nil
+}
+
+// WatchDelegationManagerSet is a free log subscription operation binding the contract event 0x2296e6d8aebb5c81250fd381a114c2ec346fc44bc4582ba95cdcac0f09df6cd9.
+//
+// Solidity: event DelegationManagerSet(address indexed delegationManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchDelegationManagerSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3DelegationManagerSet, delegationManager []common.Address) (event.Subscription, error) {
+
+	var delegationManagerRule []interface{}
+	for _, delegationManagerItem := range delegationManager {
+		delegationManagerRule = append(delegationManagerRule, delegationManagerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "DelegationManagerSet", delegationManagerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3DelegationManagerSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "DelegationManagerSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseDelegationManagerSet is a log parse operation binding the contract event 0x2296e6d8aebb5c81250fd381a114c2ec346fc44bc4582ba95cdcac0f09df6cd9.
+//
+// Solidity: event DelegationManagerSet(address indexed delegationManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseDelegationManagerSet(log types.Log) (*Mevcommitavsv3DelegationManagerSet, error) {
+	event := new(Mevcommitavsv3DelegationManagerSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "DelegationManagerSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3EigenPodManagerSetIterator is returned from FilterEigenPodManagerSet and is used to iterate over the raw logs and unpacked data for EigenPodManagerSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3EigenPodManagerSetIterator struct {
+	Event *Mevcommitavsv3EigenPodManagerSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3EigenPodManagerSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3EigenPodManagerSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3EigenPodManagerSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3EigenPodManagerSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3EigenPodManagerSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3EigenPodManagerSet represents a EigenPodManagerSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3EigenPodManagerSet struct {
+	EigenPodManager common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterEigenPodManagerSet is a free log retrieval operation binding the contract event 0x42070ca05aa3fae96a2bb90f36887ecc4894e2e33e748efeb2721962c11fd801.
+//
+// Solidity: event EigenPodManagerSet(address indexed eigenPodManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterEigenPodManagerSet(opts *bind.FilterOpts, eigenPodManager []common.Address) (*Mevcommitavsv3EigenPodManagerSetIterator, error) {
+
+	var eigenPodManagerRule []interface{}
+	for _, eigenPodManagerItem := range eigenPodManager {
+		eigenPodManagerRule = append(eigenPodManagerRule, eigenPodManagerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "EigenPodManagerSet", eigenPodManagerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3EigenPodManagerSetIterator{contract: _Mevcommitavsv3.contract, event: "EigenPodManagerSet", logs: logs, sub: sub}, nil
+}
+
+// WatchEigenPodManagerSet is a free log subscription operation binding the contract event 0x42070ca05aa3fae96a2bb90f36887ecc4894e2e33e748efeb2721962c11fd801.
+//
+// Solidity: event EigenPodManagerSet(address indexed eigenPodManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchEigenPodManagerSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3EigenPodManagerSet, eigenPodManager []common.Address) (event.Subscription, error) {
+
+	var eigenPodManagerRule []interface{}
+	for _, eigenPodManagerItem := range eigenPodManager {
+		eigenPodManagerRule = append(eigenPodManagerRule, eigenPodManagerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "EigenPodManagerSet", eigenPodManagerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3EigenPodManagerSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "EigenPodManagerSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseEigenPodManagerSet is a log parse operation binding the contract event 0x42070ca05aa3fae96a2bb90f36887ecc4894e2e33e748efeb2721962c11fd801.
+//
+// Solidity: event EigenPodManagerSet(address indexed eigenPodManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseEigenPodManagerSet(log types.Log) (*Mevcommitavsv3EigenPodManagerSet, error) {
+	event := new(Mevcommitavsv3EigenPodManagerSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "EigenPodManagerSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3FreezeOracleSetIterator is returned from FilterFreezeOracleSet and is used to iterate over the raw logs and unpacked data for FreezeOracleSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3FreezeOracleSetIterator struct {
+	Event *Mevcommitavsv3FreezeOracleSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3FreezeOracleSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3FreezeOracleSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3FreezeOracleSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3FreezeOracleSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3FreezeOracleSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3FreezeOracleSet represents a FreezeOracleSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3FreezeOracleSet struct {
+	FreezeOracle common.Address
+	Raw          types.Log // Blockchain specific contextual infos
+}
+
+// FilterFreezeOracleSet is a free log retrieval operation binding the contract event 0xa33f3723c675820c785c70cde43f95aea5a4a0da3a5443a6cc129e14fcc9455a.
+//
+// Solidity: event FreezeOracleSet(address indexed freezeOracle)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterFreezeOracleSet(opts *bind.FilterOpts, freezeOracle []common.Address) (*Mevcommitavsv3FreezeOracleSetIterator, error) {
+
+	var freezeOracleRule []interface{}
+	for _, freezeOracleItem := range freezeOracle {
+		freezeOracleRule = append(freezeOracleRule, freezeOracleItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "FreezeOracleSet", freezeOracleRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3FreezeOracleSetIterator{contract: _Mevcommitavsv3.contract, event: "FreezeOracleSet", logs: logs, sub: sub}, nil
+}
+
+// WatchFreezeOracleSet is a free log subscription operation binding the contract event 0xa33f3723c675820c785c70cde43f95aea5a4a0da3a5443a6cc129e14fcc9455a.
+//
+// Solidity: event FreezeOracleSet(address indexed freezeOracle)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchFreezeOracleSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3FreezeOracleSet, freezeOracle []common.Address) (event.Subscription, error) {
+
+	var freezeOracleRule []interface{}
+	for _, freezeOracleItem := range freezeOracle {
+		freezeOracleRule = append(freezeOracleRule, freezeOracleItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "FreezeOracleSet", freezeOracleRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3FreezeOracleSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "FreezeOracleSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseFreezeOracleSet is a log parse operation binding the contract event 0xa33f3723c675820c785c70cde43f95aea5a4a0da3a5443a6cc129e14fcc9455a.
+//
+// Solidity: event FreezeOracleSet(address indexed freezeOracle)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseFreezeOracleSet(log types.Log) (*Mevcommitavsv3FreezeOracleSet, error) {
+	event := new(Mevcommitavsv3FreezeOracleSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "FreezeOracleSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3InitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3InitializedIterator struct {
+	Event *Mevcommitavsv3Initialized // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3InitializedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3Initialized)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3Initialized)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3InitializedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3InitializedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3Initialized represents a Initialized event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3Initialized struct {
+	Version uint64
+	Raw     types.Log // Blockchain specific contextual infos
+}
+
+// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
+//
+// Solidity: event Initialized(uint64 version)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterInitialized(opts *bind.FilterOpts) (*Mevcommitavsv3InitializedIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "Initialized")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3InitializedIterator{contract: _Mevcommitavsv3.contract, event: "Initialized", logs: logs, sub: sub}, nil
+}
+
+// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
+//
+// Solidity: event Initialized(uint64 version)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3Initialized) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "Initialized")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3Initialized)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "Initialized", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
+//
+// Solidity: event Initialized(uint64 version)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseInitialized(log types.Log) (*Mevcommitavsv3Initialized, error) {
+	event := new(Mevcommitavsv3Initialized)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "Initialized", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3LSTRestakerDeregPeriodBlocksSetIterator is returned from FilterLSTRestakerDeregPeriodBlocksSet and is used to iterate over the raw logs and unpacked data for LSTRestakerDeregPeriodBlocksSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerDeregPeriodBlocksSetIterator struct {
+	Event *Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3LSTRestakerDeregPeriodBlocksSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3LSTRestakerDeregPeriodBlocksSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3LSTRestakerDeregPeriodBlocksSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet represents a LSTRestakerDeregPeriodBlocksSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet struct {
+	LstRestakerDeregPeriodBlocks *big.Int
+	Raw                          types.Log // Blockchain specific contextual infos
+}
+
+// FilterLSTRestakerDeregPeriodBlocksSet is a free log retrieval operation binding the contract event 0x7bd82fe806a0299d04c1dc6b928d934d0515dd3dfb8e6b0a0ca02267da5ec181.
+//
+// Solidity: event LSTRestakerDeregPeriodBlocksSet(uint256 lstRestakerDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterLSTRestakerDeregPeriodBlocksSet(opts *bind.FilterOpts) (*Mevcommitavsv3LSTRestakerDeregPeriodBlocksSetIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "LSTRestakerDeregPeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3LSTRestakerDeregPeriodBlocksSetIterator{contract: _Mevcommitavsv3.contract, event: "LSTRestakerDeregPeriodBlocksSet", logs: logs, sub: sub}, nil
+}
+
+// WatchLSTRestakerDeregPeriodBlocksSet is a free log subscription operation binding the contract event 0x7bd82fe806a0299d04c1dc6b928d934d0515dd3dfb8e6b0a0ca02267da5ec181.
+//
+// Solidity: event LSTRestakerDeregPeriodBlocksSet(uint256 lstRestakerDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchLSTRestakerDeregPeriodBlocksSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "LSTRestakerDeregPeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerDeregPeriodBlocksSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseLSTRestakerDeregPeriodBlocksSet is a log parse operation binding the contract event 0x7bd82fe806a0299d04c1dc6b928d934d0515dd3dfb8e6b0a0ca02267da5ec181.
+//
+// Solidity: event LSTRestakerDeregPeriodBlocksSet(uint256 lstRestakerDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseLSTRestakerDeregPeriodBlocksSet(log types.Log) (*Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet, error) {
+	event := new(Mevcommitavsv3LSTRestakerDeregPeriodBlocksSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerDeregPeriodBlocksSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3LSTRestakerDeregisteredIterator is returned from FilterLSTRestakerDeregistered and is used to iterate over the raw logs and unpacked data for LSTRestakerDeregistered events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerDeregisteredIterator struct {
+	Event *Mevcommitavsv3LSTRestakerDeregistered // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3LSTRestakerDeregisteredIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3LSTRestakerDeregistered)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3LSTRestakerDeregistered)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3LSTRestakerDeregisteredIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3LSTRestakerDeregisteredIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3LSTRestakerDeregistered represents a LSTRestakerDeregistered event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerDeregistered struct {
+	ChosenValidator []byte
+	NumChosen       *big.Int
+	LstRestaker     common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterLSTRestakerDeregistered is a free log retrieval operation binding the contract event 0xaf3d14c12fe6a17d9cab68818354270a52de8de87f44c614c8cf7c35e96086fd.
+//
+// Solidity: event LSTRestakerDeregistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterLSTRestakerDeregistered(opts *bind.FilterOpts, lstRestaker []common.Address) (*Mevcommitavsv3LSTRestakerDeregisteredIterator, error) {
+
+	var lstRestakerRule []interface{}
+	for _, lstRestakerItem := range lstRestaker {
+		lstRestakerRule = append(lstRestakerRule, lstRestakerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "LSTRestakerDeregistered", lstRestakerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3LSTRestakerDeregisteredIterator{contract: _Mevcommitavsv3.contract, event: "LSTRestakerDeregistered", logs: logs, sub: sub}, nil
+}
+
+// WatchLSTRestakerDeregistered is a free log subscription operation binding the contract event 0xaf3d14c12fe6a17d9cab68818354270a52de8de87f44c614c8cf7c35e96086fd.
+//
+// Solidity: event LSTRestakerDeregistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchLSTRestakerDeregistered(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3LSTRestakerDeregistered, lstRestaker []common.Address) (event.Subscription, error) {
+
+	var lstRestakerRule []interface{}
+	for _, lstRestakerItem := range lstRestaker {
+		lstRestakerRule = append(lstRestakerRule, lstRestakerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "LSTRestakerDeregistered", lstRestakerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3LSTRestakerDeregistered)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerDeregistered", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseLSTRestakerDeregistered is a log parse operation binding the contract event 0xaf3d14c12fe6a17d9cab68818354270a52de8de87f44c614c8cf7c35e96086fd.
+//
+// Solidity: event LSTRestakerDeregistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseLSTRestakerDeregistered(log types.Log) (*Mevcommitavsv3LSTRestakerDeregistered, error) {
+	event := new(Mevcommitavsv3LSTRestakerDeregistered)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerDeregistered", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3LSTRestakerDeregistrationRequestedIterator is returned from FilterLSTRestakerDeregistrationRequested and is used to iterate over the raw logs and unpacked data for LSTRestakerDeregistrationRequested events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerDeregistrationRequestedIterator struct {
+	Event *Mevcommitavsv3LSTRestakerDeregistrationRequested // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3LSTRestakerDeregistrationRequestedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3LSTRestakerDeregistrationRequested)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3LSTRestakerDeregistrationRequested)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3LSTRestakerDeregistrationRequestedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3LSTRestakerDeregistrationRequestedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3LSTRestakerDeregistrationRequested represents a LSTRestakerDeregistrationRequested event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerDeregistrationRequested struct {
+	ChosenValidator []byte
+	NumChosen       *big.Int
+	LstRestaker     common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterLSTRestakerDeregistrationRequested is a free log retrieval operation binding the contract event 0x6a7ec4f90fd0baec2ae0d35e6c4731b6c833f9f082a3fe8f5b30fe1be4af1c3b.
+//
+// Solidity: event LSTRestakerDeregistrationRequested(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterLSTRestakerDeregistrationRequested(opts *bind.FilterOpts, lstRestaker []common.Address) (*Mevcommitavsv3LSTRestakerDeregistrationRequestedIterator, error) {
+
+	var lstRestakerRule []interface{}
+	for _, lstRestakerItem := range lstRestaker {
+		lstRestakerRule = append(lstRestakerRule, lstRestakerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "LSTRestakerDeregistrationRequested", lstRestakerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3LSTRestakerDeregistrationRequestedIterator{contract: _Mevcommitavsv3.contract, event: "LSTRestakerDeregistrationRequested", logs: logs, sub: sub}, nil
+}
+
+// WatchLSTRestakerDeregistrationRequested is a free log subscription operation binding the contract event 0x6a7ec4f90fd0baec2ae0d35e6c4731b6c833f9f082a3fe8f5b30fe1be4af1c3b.
+//
+// Solidity: event LSTRestakerDeregistrationRequested(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchLSTRestakerDeregistrationRequested(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3LSTRestakerDeregistrationRequested, lstRestaker []common.Address) (event.Subscription, error) {
+
+	var lstRestakerRule []interface{}
+	for _, lstRestakerItem := range lstRestaker {
+		lstRestakerRule = append(lstRestakerRule, lstRestakerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "LSTRestakerDeregistrationRequested", lstRestakerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3LSTRestakerDeregistrationRequested)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerDeregistrationRequested", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseLSTRestakerDeregistrationRequested is a log parse operation binding the contract event 0x6a7ec4f90fd0baec2ae0d35e6c4731b6c833f9f082a3fe8f5b30fe1be4af1c3b.
+//
+// Solidity: event LSTRestakerDeregistrationRequested(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseLSTRestakerDeregistrationRequested(log types.Log) (*Mevcommitavsv3LSTRestakerDeregistrationRequested, error) {
+	event := new(Mevcommitavsv3LSTRestakerDeregistrationRequested)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerDeregistrationRequested", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3LSTRestakerRegisteredIterator is returned from FilterLSTRestakerRegistered and is used to iterate over the raw logs and unpacked data for LSTRestakerRegistered events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerRegisteredIterator struct {
+	Event *Mevcommitavsv3LSTRestakerRegistered // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3LSTRestakerRegisteredIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3LSTRestakerRegistered)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3LSTRestakerRegistered)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3LSTRestakerRegisteredIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3LSTRestakerRegisteredIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3LSTRestakerRegistered represents a LSTRestakerRegistered event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3LSTRestakerRegistered struct {
+	ChosenValidator []byte
+	NumChosen       *big.Int
+	LstRestaker     common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterLSTRestakerRegistered is a free log retrieval operation binding the contract event 0xdecaa7bc9a78e41b524d10750b5a52f0c8c1144cd5ab2991c9ca75ff380e011a.
+//
+// Solidity: event LSTRestakerRegistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterLSTRestakerRegistered(opts *bind.FilterOpts, lstRestaker []common.Address) (*Mevcommitavsv3LSTRestakerRegisteredIterator, error) {
+
+	var lstRestakerRule []interface{}
+	for _, lstRestakerItem := range lstRestaker {
+		lstRestakerRule = append(lstRestakerRule, lstRestakerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "LSTRestakerRegistered", lstRestakerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3LSTRestakerRegisteredIterator{contract: _Mevcommitavsv3.contract, event: "LSTRestakerRegistered", logs: logs, sub: sub}, nil
+}
+
+// WatchLSTRestakerRegistered is a free log subscription operation binding the contract event 0xdecaa7bc9a78e41b524d10750b5a52f0c8c1144cd5ab2991c9ca75ff380e011a.
+//
+// Solidity: event LSTRestakerRegistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchLSTRestakerRegistered(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3LSTRestakerRegistered, lstRestaker []common.Address) (event.Subscription, error) {
+
+	var lstRestakerRule []interface{}
+	for _, lstRestakerItem := range lstRestaker {
+		lstRestakerRule = append(lstRestakerRule, lstRestakerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "LSTRestakerRegistered", lstRestakerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3LSTRestakerRegistered)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerRegistered", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseLSTRestakerRegistered is a log parse operation binding the contract event 0xdecaa7bc9a78e41b524d10750b5a52f0c8c1144cd5ab2991c9ca75ff380e011a.
+//
+// Solidity: event LSTRestakerRegistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseLSTRestakerRegistered(log types.Log) (*Mevcommitavsv3LSTRestakerRegistered, error) {
+	event := new(Mevcommitavsv3LSTRestakerRegistered)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "LSTRestakerRegistered", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3OperatorDeregPeriodBlocksSetIterator is returned from FilterOperatorDeregPeriodBlocksSet and is used to iterate over the raw logs and unpacked data for OperatorDeregPeriodBlocksSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorDeregPeriodBlocksSetIterator struct {
+	Event *Mevcommitavsv3OperatorDeregPeriodBlocksSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3OperatorDeregPeriodBlocksSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3OperatorDeregPeriodBlocksSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3OperatorDeregPeriodBlocksSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3OperatorDeregPeriodBlocksSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3OperatorDeregPeriodBlocksSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3OperatorDeregPeriodBlocksSet represents a OperatorDeregPeriodBlocksSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorDeregPeriodBlocksSet struct {
+	OperatorDeregPeriodBlocks *big.Int
+	Raw                       types.Log // Blockchain specific contextual infos
+}
+
+// FilterOperatorDeregPeriodBlocksSet is a free log retrieval operation binding the contract event 0xfea621e39fd1186d690d8fa903a946ee52fee14c9c1f1c7295173b2e623b517e.
+//
+// Solidity: event OperatorDeregPeriodBlocksSet(uint256 operatorDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterOperatorDeregPeriodBlocksSet(opts *bind.FilterOpts) (*Mevcommitavsv3OperatorDeregPeriodBlocksSetIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "OperatorDeregPeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3OperatorDeregPeriodBlocksSetIterator{contract: _Mevcommitavsv3.contract, event: "OperatorDeregPeriodBlocksSet", logs: logs, sub: sub}, nil
+}
+
+// WatchOperatorDeregPeriodBlocksSet is a free log subscription operation binding the contract event 0xfea621e39fd1186d690d8fa903a946ee52fee14c9c1f1c7295173b2e623b517e.
+//
+// Solidity: event OperatorDeregPeriodBlocksSet(uint256 operatorDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchOperatorDeregPeriodBlocksSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3OperatorDeregPeriodBlocksSet) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "OperatorDeregPeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3OperatorDeregPeriodBlocksSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorDeregPeriodBlocksSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseOperatorDeregPeriodBlocksSet is a log parse operation binding the contract event 0xfea621e39fd1186d690d8fa903a946ee52fee14c9c1f1c7295173b2e623b517e.
+//
+// Solidity: event OperatorDeregPeriodBlocksSet(uint256 operatorDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseOperatorDeregPeriodBlocksSet(log types.Log) (*Mevcommitavsv3OperatorDeregPeriodBlocksSet, error) {
+	event := new(Mevcommitavsv3OperatorDeregPeriodBlocksSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorDeregPeriodBlocksSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3OperatorDeregisteredIterator is returned from FilterOperatorDeregistered and is used to iterate over the raw logs and unpacked data for OperatorDeregistered events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorDeregisteredIterator struct {
+	Event *Mevcommitavsv3OperatorDeregistered // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3OperatorDeregisteredIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3OperatorDeregistered)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3OperatorDeregistered)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3OperatorDeregisteredIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3OperatorDeregisteredIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3OperatorDeregistered represents a OperatorDeregistered event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorDeregistered struct {
+	Operator common.Address
+	Raw      types.Log // Blockchain specific contextual infos
+}
+
+// FilterOperatorDeregistered is a free log retrieval operation binding the contract event 0x6dd4ca66565fb3dee8076c654634c6c4ad949022d809d0394308617d6791218d.
+//
+// Solidity: event OperatorDeregistered(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterOperatorDeregistered(opts *bind.FilterOpts, operator []common.Address) (*Mevcommitavsv3OperatorDeregisteredIterator, error) {
+
+	var operatorRule []interface{}
+	for _, operatorItem := range operator {
+		operatorRule = append(operatorRule, operatorItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "OperatorDeregistered", operatorRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3OperatorDeregisteredIterator{contract: _Mevcommitavsv3.contract, event: "OperatorDeregistered", logs: logs, sub: sub}, nil
+}
+
+// WatchOperatorDeregistered is a free log subscription operation binding the contract event 0x6dd4ca66565fb3dee8076c654634c6c4ad949022d809d0394308617d6791218d.
+//
+// Solidity: event OperatorDeregistered(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchOperatorDeregistered(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3OperatorDeregistered, operator []common.Address) (event.Subscription, error) {
+
+	var operatorRule []interface{}
+	for _, operatorItem := range operator {
+		operatorRule = append(operatorRule, operatorItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "OperatorDeregistered", operatorRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3OperatorDeregistered)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseOperatorDeregistered is a log parse operation binding the contract event 0x6dd4ca66565fb3dee8076c654634c6c4ad949022d809d0394308617d6791218d.
+//
+// Solidity: event OperatorDeregistered(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseOperatorDeregistered(log types.Log) (*Mevcommitavsv3OperatorDeregistered, error) {
+	event := new(Mevcommitavsv3OperatorDeregistered)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3OperatorDeregistrationRequestedIterator is returned from FilterOperatorDeregistrationRequested and is used to iterate over the raw logs and unpacked data for OperatorDeregistrationRequested events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorDeregistrationRequestedIterator struct {
+	Event *Mevcommitavsv3OperatorDeregistrationRequested // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3OperatorDeregistrationRequestedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3OperatorDeregistrationRequested)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3OperatorDeregistrationRequested)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3OperatorDeregistrationRequestedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3OperatorDeregistrationRequestedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3OperatorDeregistrationRequested represents a OperatorDeregistrationRequested event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorDeregistrationRequested struct {
+	Operator common.Address
+	Raw      types.Log // Blockchain specific contextual infos
+}
+
+// FilterOperatorDeregistrationRequested is a free log retrieval operation binding the contract event 0x4df522c04c21ddaed6db450a1c41907201a3daa6e80a58d12962062860a20d02.
+//
+// Solidity: event OperatorDeregistrationRequested(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterOperatorDeregistrationRequested(opts *bind.FilterOpts, operator []common.Address) (*Mevcommitavsv3OperatorDeregistrationRequestedIterator, error) {
+
+	var operatorRule []interface{}
+	for _, operatorItem := range operator {
+		operatorRule = append(operatorRule, operatorItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "OperatorDeregistrationRequested", operatorRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3OperatorDeregistrationRequestedIterator{contract: _Mevcommitavsv3.contract, event: "OperatorDeregistrationRequested", logs: logs, sub: sub}, nil
+}
+
+// WatchOperatorDeregistrationRequested is a free log subscription operation binding the contract event 0x4df522c04c21ddaed6db450a1c41907201a3daa6e80a58d12962062860a20d02.
+//
+// Solidity: event OperatorDeregistrationRequested(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchOperatorDeregistrationRequested(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3OperatorDeregistrationRequested, operator []common.Address) (event.Subscription, error) {
+
+	var operatorRule []interface{}
+	for _, operatorItem := range operator {
+		operatorRule = append(operatorRule, operatorItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "OperatorDeregistrationRequested", operatorRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3OperatorDeregistrationRequested)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorDeregistrationRequested", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseOperatorDeregistrationRequested is a log parse operation binding the contract event 0x4df522c04c21ddaed6db450a1c41907201a3daa6e80a58d12962062860a20d02.
+//
+// Solidity: event OperatorDeregistrationRequested(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseOperatorDeregistrationRequested(log types.Log) (*Mevcommitavsv3OperatorDeregistrationRequested, error) {
+	event := new(Mevcommitavsv3OperatorDeregistrationRequested)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorDeregistrationRequested", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3OperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorRegisteredIterator struct {
+	Event *Mevcommitavsv3OperatorRegistered // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3OperatorRegisteredIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3OperatorRegistered)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3OperatorRegistered)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3OperatorRegisteredIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3OperatorRegisteredIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3OperatorRegistered represents a OperatorRegistered event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OperatorRegistered struct {
+	Operator common.Address
+	Raw      types.Log // Blockchain specific contextual infos
+}
+
+// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0x4d0eb1f4bac8744fd2be119845e23b3befc88094b42bcda1204c65694a00f9e5.
+//
+// Solidity: event OperatorRegistered(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address) (*Mevcommitavsv3OperatorRegisteredIterator, error) {
+
+	var operatorRule []interface{}
+	for _, operatorItem := range operator {
+		operatorRule = append(operatorRule, operatorItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "OperatorRegistered", operatorRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3OperatorRegisteredIterator{contract: _Mevcommitavsv3.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil
+}
+
+// WatchOperatorRegistered is a free log subscription operation binding the contract event 0x4d0eb1f4bac8744fd2be119845e23b3befc88094b42bcda1204c65694a00f9e5.
+//
+// Solidity: event OperatorRegistered(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3OperatorRegistered, operator []common.Address) (event.Subscription, error) {
+
+	var operatorRule []interface{}
+	for _, operatorItem := range operator {
+		operatorRule = append(operatorRule, operatorItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "OperatorRegistered", operatorRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3OperatorRegistered)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorRegistered", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseOperatorRegistered is a log parse operation binding the contract event 0x4d0eb1f4bac8744fd2be119845e23b3befc88094b42bcda1204c65694a00f9e5.
+//
+// Solidity: event OperatorRegistered(address indexed operator)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseOperatorRegistered(log types.Log) (*Mevcommitavsv3OperatorRegistered, error) {
+	event := new(Mevcommitavsv3OperatorRegistered)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "OperatorRegistered", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3OwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OwnershipTransferStartedIterator struct {
+	Event *Mevcommitavsv3OwnershipTransferStarted // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3OwnershipTransferStartedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3OwnershipTransferStarted)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3OwnershipTransferStarted)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3OwnershipTransferStartedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3OwnershipTransferStartedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3OwnershipTransferStarted represents a OwnershipTransferStarted event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OwnershipTransferStarted struct {
+	PreviousOwner common.Address
+	NewOwner      common.Address
+	Raw           types.Log // Blockchain specific contextual infos
+}
+
+// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700.
+//
+// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*Mevcommitavsv3OwnershipTransferStartedIterator, error) {
+
+	var previousOwnerRule []interface{}
+	for _, previousOwnerItem := range previousOwner {
+		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
+	}
+	var newOwnerRule []interface{}
+	for _, newOwnerItem := range newOwner {
+		newOwnerRule = append(newOwnerRule, newOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3OwnershipTransferStartedIterator{contract: _Mevcommitavsv3.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil
+}
+
+// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700.
+//
+// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3OwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {
+
+	var previousOwnerRule []interface{}
+	for _, previousOwnerItem := range previousOwner {
+		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
+	}
+	var newOwnerRule []interface{}
+	for _, newOwnerItem := range newOwner {
+		newOwnerRule = append(newOwnerRule, newOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3OwnershipTransferStarted)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700.
+//
+// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseOwnershipTransferStarted(log types.Log) (*Mevcommitavsv3OwnershipTransferStarted, error) {
+	event := new(Mevcommitavsv3OwnershipTransferStarted)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3OwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OwnershipTransferredIterator struct {
+	Event *Mevcommitavsv3OwnershipTransferred // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3OwnershipTransferredIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3OwnershipTransferred)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3OwnershipTransferred)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3OwnershipTransferredIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3OwnershipTransferredIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3OwnershipTransferred represents a OwnershipTransferred event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3OwnershipTransferred struct {
+	PreviousOwner common.Address
+	NewOwner      common.Address
+	Raw           types.Log // Blockchain specific contextual infos
+}
+
+// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
+//
+// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*Mevcommitavsv3OwnershipTransferredIterator, error) {
+
+	var previousOwnerRule []interface{}
+	for _, previousOwnerItem := range previousOwner {
+		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
+	}
+	var newOwnerRule []interface{}
+	for _, newOwnerItem := range newOwner {
+		newOwnerRule = append(newOwnerRule, newOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3OwnershipTransferredIterator{contract: _Mevcommitavsv3.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
+}
+
+// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
+//
+// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3OwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {
+
+	var previousOwnerRule []interface{}
+	for _, previousOwnerItem := range previousOwner {
+		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
+	}
+	var newOwnerRule []interface{}
+	for _, newOwnerItem := range newOwner {
+		newOwnerRule = append(newOwnerRule, newOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3OwnershipTransferred)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
+//
+// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseOwnershipTransferred(log types.Log) (*Mevcommitavsv3OwnershipTransferred, error) {
+	event := new(Mevcommitavsv3OwnershipTransferred)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3PausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3PausedIterator struct {
+	Event *Mevcommitavsv3Paused // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3PausedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3Paused)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3Paused)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3PausedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3PausedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3Paused represents a Paused event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3Paused struct {
+	Account common.Address
+	Raw     types.Log // Blockchain specific contextual infos
+}
+
+// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258.
+//
+// Solidity: event Paused(address account)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterPaused(opts *bind.FilterOpts) (*Mevcommitavsv3PausedIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "Paused")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3PausedIterator{contract: _Mevcommitavsv3.contract, event: "Paused", logs: logs, sub: sub}, nil
+}
+
+// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258.
+//
+// Solidity: event Paused(address account)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3Paused) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "Paused")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3Paused)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "Paused", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258.
+//
+// Solidity: event Paused(address account)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParsePaused(log types.Log) (*Mevcommitavsv3Paused, error) {
+	event := new(Mevcommitavsv3Paused)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "Paused", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3RestakeableStrategiesSetIterator is returned from FilterRestakeableStrategiesSet and is used to iterate over the raw logs and unpacked data for RestakeableStrategiesSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3RestakeableStrategiesSetIterator struct {
+	Event *Mevcommitavsv3RestakeableStrategiesSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3RestakeableStrategiesSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3RestakeableStrategiesSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3RestakeableStrategiesSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3RestakeableStrategiesSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3RestakeableStrategiesSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3RestakeableStrategiesSet represents a RestakeableStrategiesSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3RestakeableStrategiesSet struct {
+	RestakeableStrategies []common.Address
+	Raw                   types.Log // Blockchain specific contextual infos
+}
+
+// FilterRestakeableStrategiesSet is a free log retrieval operation binding the contract event 0xda4dd29046c55387af7520737a1e06033ae31f610dde3d0851458dffe13a0c0f.
+//
+// Solidity: event RestakeableStrategiesSet(address[] indexed restakeableStrategies)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterRestakeableStrategiesSet(opts *bind.FilterOpts, restakeableStrategies [][]common.Address) (*Mevcommitavsv3RestakeableStrategiesSetIterator, error) {
+
+	var restakeableStrategiesRule []interface{}
+	for _, restakeableStrategiesItem := range restakeableStrategies {
+		restakeableStrategiesRule = append(restakeableStrategiesRule, restakeableStrategiesItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "RestakeableStrategiesSet", restakeableStrategiesRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3RestakeableStrategiesSetIterator{contract: _Mevcommitavsv3.contract, event: "RestakeableStrategiesSet", logs: logs, sub: sub}, nil
+}
+
+// WatchRestakeableStrategiesSet is a free log subscription operation binding the contract event 0xda4dd29046c55387af7520737a1e06033ae31f610dde3d0851458dffe13a0c0f.
+//
+// Solidity: event RestakeableStrategiesSet(address[] indexed restakeableStrategies)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchRestakeableStrategiesSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3RestakeableStrategiesSet, restakeableStrategies [][]common.Address) (event.Subscription, error) {
+
+	var restakeableStrategiesRule []interface{}
+	for _, restakeableStrategiesItem := range restakeableStrategies {
+		restakeableStrategiesRule = append(restakeableStrategiesRule, restakeableStrategiesItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "RestakeableStrategiesSet", restakeableStrategiesRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3RestakeableStrategiesSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "RestakeableStrategiesSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseRestakeableStrategiesSet is a log parse operation binding the contract event 0xda4dd29046c55387af7520737a1e06033ae31f610dde3d0851458dffe13a0c0f.
+//
+// Solidity: event RestakeableStrategiesSet(address[] indexed restakeableStrategies)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseRestakeableStrategiesSet(log types.Log) (*Mevcommitavsv3RestakeableStrategiesSet, error) {
+	event := new(Mevcommitavsv3RestakeableStrategiesSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "RestakeableStrategiesSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3StrategyManagerSetIterator is returned from FilterStrategyManagerSet and is used to iterate over the raw logs and unpacked data for StrategyManagerSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3StrategyManagerSetIterator struct {
+	Event *Mevcommitavsv3StrategyManagerSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3StrategyManagerSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3StrategyManagerSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3StrategyManagerSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3StrategyManagerSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3StrategyManagerSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3StrategyManagerSet represents a StrategyManagerSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3StrategyManagerSet struct {
+	StrategyManager common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterStrategyManagerSet is a free log retrieval operation binding the contract event 0x76fe640b216c20f563ab2d807634271e9d772e92c8a3752325cb2bc924e9e514.
+//
+// Solidity: event StrategyManagerSet(address indexed strategyManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterStrategyManagerSet(opts *bind.FilterOpts, strategyManager []common.Address) (*Mevcommitavsv3StrategyManagerSetIterator, error) {
+
+	var strategyManagerRule []interface{}
+	for _, strategyManagerItem := range strategyManager {
+		strategyManagerRule = append(strategyManagerRule, strategyManagerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "StrategyManagerSet", strategyManagerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3StrategyManagerSetIterator{contract: _Mevcommitavsv3.contract, event: "StrategyManagerSet", logs: logs, sub: sub}, nil
+}
+
+// WatchStrategyManagerSet is a free log subscription operation binding the contract event 0x76fe640b216c20f563ab2d807634271e9d772e92c8a3752325cb2bc924e9e514.
+//
+// Solidity: event StrategyManagerSet(address indexed strategyManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchStrategyManagerSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3StrategyManagerSet, strategyManager []common.Address) (event.Subscription, error) {
+
+	var strategyManagerRule []interface{}
+	for _, strategyManagerItem := range strategyManager {
+		strategyManagerRule = append(strategyManagerRule, strategyManagerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "StrategyManagerSet", strategyManagerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3StrategyManagerSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "StrategyManagerSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseStrategyManagerSet is a log parse operation binding the contract event 0x76fe640b216c20f563ab2d807634271e9d772e92c8a3752325cb2bc924e9e514.
+//
+// Solidity: event StrategyManagerSet(address indexed strategyManager)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseStrategyManagerSet(log types.Log) (*Mevcommitavsv3StrategyManagerSet, error) {
+	event := new(Mevcommitavsv3StrategyManagerSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "StrategyManagerSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3UnfreezeFeeSetIterator is returned from FilterUnfreezeFeeSet and is used to iterate over the raw logs and unpacked data for UnfreezeFeeSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UnfreezeFeeSetIterator struct {
+	Event *Mevcommitavsv3UnfreezeFeeSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3UnfreezeFeeSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3UnfreezeFeeSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3UnfreezeFeeSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3UnfreezeFeeSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3UnfreezeFeeSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3UnfreezeFeeSet represents a UnfreezeFeeSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UnfreezeFeeSet struct {
+	UnfreezeFee *big.Int
+	Raw         types.Log // Blockchain specific contextual infos
+}
+
+// FilterUnfreezeFeeSet is a free log retrieval operation binding the contract event 0x6c0cf79356801bf6665a4c6cc85d35896ca003fe22c8c92c2b0e1d563b384c9d.
+//
+// Solidity: event UnfreezeFeeSet(uint256 unfreezeFee)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterUnfreezeFeeSet(opts *bind.FilterOpts) (*Mevcommitavsv3UnfreezeFeeSetIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "UnfreezeFeeSet")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3UnfreezeFeeSetIterator{contract: _Mevcommitavsv3.contract, event: "UnfreezeFeeSet", logs: logs, sub: sub}, nil
+}
+
+// WatchUnfreezeFeeSet is a free log subscription operation binding the contract event 0x6c0cf79356801bf6665a4c6cc85d35896ca003fe22c8c92c2b0e1d563b384c9d.
+//
+// Solidity: event UnfreezeFeeSet(uint256 unfreezeFee)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchUnfreezeFeeSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3UnfreezeFeeSet) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "UnfreezeFeeSet")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3UnfreezeFeeSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "UnfreezeFeeSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseUnfreezeFeeSet is a log parse operation binding the contract event 0x6c0cf79356801bf6665a4c6cc85d35896ca003fe22c8c92c2b0e1d563b384c9d.
+//
+// Solidity: event UnfreezeFeeSet(uint256 unfreezeFee)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseUnfreezeFeeSet(log types.Log) (*Mevcommitavsv3UnfreezeFeeSet, error) {
+	event := new(Mevcommitavsv3UnfreezeFeeSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "UnfreezeFeeSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3UnfreezePeriodBlocksSetIterator is returned from FilterUnfreezePeriodBlocksSet and is used to iterate over the raw logs and unpacked data for UnfreezePeriodBlocksSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UnfreezePeriodBlocksSetIterator struct {
+	Event *Mevcommitavsv3UnfreezePeriodBlocksSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3UnfreezePeriodBlocksSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3UnfreezePeriodBlocksSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3UnfreezePeriodBlocksSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3UnfreezePeriodBlocksSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3UnfreezePeriodBlocksSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3UnfreezePeriodBlocksSet represents a UnfreezePeriodBlocksSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UnfreezePeriodBlocksSet struct {
+	UnfreezePeriodBlocks *big.Int
+	Raw                  types.Log // Blockchain specific contextual infos
+}
+
+// FilterUnfreezePeriodBlocksSet is a free log retrieval operation binding the contract event 0xdf42b0e9b907c6972f5ad1b757b3ab4e0eeca44f9b9dc7c8d97f2f40c1a042dd.
+//
+// Solidity: event UnfreezePeriodBlocksSet(uint256 unfreezePeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterUnfreezePeriodBlocksSet(opts *bind.FilterOpts) (*Mevcommitavsv3UnfreezePeriodBlocksSetIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "UnfreezePeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3UnfreezePeriodBlocksSetIterator{contract: _Mevcommitavsv3.contract, event: "UnfreezePeriodBlocksSet", logs: logs, sub: sub}, nil
+}
+
+// WatchUnfreezePeriodBlocksSet is a free log subscription operation binding the contract event 0xdf42b0e9b907c6972f5ad1b757b3ab4e0eeca44f9b9dc7c8d97f2f40c1a042dd.
+//
+// Solidity: event UnfreezePeriodBlocksSet(uint256 unfreezePeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchUnfreezePeriodBlocksSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3UnfreezePeriodBlocksSet) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "UnfreezePeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3UnfreezePeriodBlocksSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "UnfreezePeriodBlocksSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseUnfreezePeriodBlocksSet is a log parse operation binding the contract event 0xdf42b0e9b907c6972f5ad1b757b3ab4e0eeca44f9b9dc7c8d97f2f40c1a042dd.
+//
+// Solidity: event UnfreezePeriodBlocksSet(uint256 unfreezePeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseUnfreezePeriodBlocksSet(log types.Log) (*Mevcommitavsv3UnfreezePeriodBlocksSet, error) {
+	event := new(Mevcommitavsv3UnfreezePeriodBlocksSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "UnfreezePeriodBlocksSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3UnfreezeReceiverSetIterator is returned from FilterUnfreezeReceiverSet and is used to iterate over the raw logs and unpacked data for UnfreezeReceiverSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UnfreezeReceiverSetIterator struct {
+	Event *Mevcommitavsv3UnfreezeReceiverSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3UnfreezeReceiverSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3UnfreezeReceiverSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3UnfreezeReceiverSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3UnfreezeReceiverSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3UnfreezeReceiverSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3UnfreezeReceiverSet represents a UnfreezeReceiverSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UnfreezeReceiverSet struct {
+	UnfreezeReceiver common.Address
+	Raw              types.Log // Blockchain specific contextual infos
+}
+
+// FilterUnfreezeReceiverSet is a free log retrieval operation binding the contract event 0x7b992f6c09b22e43cad1f0f9a1d7e41949ac1c53a4eebb7f4b2374605049d2bf.
+//
+// Solidity: event UnfreezeReceiverSet(address indexed unfreezeReceiver)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterUnfreezeReceiverSet(opts *bind.FilterOpts, unfreezeReceiver []common.Address) (*Mevcommitavsv3UnfreezeReceiverSetIterator, error) {
+
+	var unfreezeReceiverRule []interface{}
+	for _, unfreezeReceiverItem := range unfreezeReceiver {
+		unfreezeReceiverRule = append(unfreezeReceiverRule, unfreezeReceiverItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "UnfreezeReceiverSet", unfreezeReceiverRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3UnfreezeReceiverSetIterator{contract: _Mevcommitavsv3.contract, event: "UnfreezeReceiverSet", logs: logs, sub: sub}, nil
+}
+
+// WatchUnfreezeReceiverSet is a free log subscription operation binding the contract event 0x7b992f6c09b22e43cad1f0f9a1d7e41949ac1c53a4eebb7f4b2374605049d2bf.
+//
+// Solidity: event UnfreezeReceiverSet(address indexed unfreezeReceiver)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchUnfreezeReceiverSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3UnfreezeReceiverSet, unfreezeReceiver []common.Address) (event.Subscription, error) {
+
+	var unfreezeReceiverRule []interface{}
+	for _, unfreezeReceiverItem := range unfreezeReceiver {
+		unfreezeReceiverRule = append(unfreezeReceiverRule, unfreezeReceiverItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "UnfreezeReceiverSet", unfreezeReceiverRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3UnfreezeReceiverSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "UnfreezeReceiverSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseUnfreezeReceiverSet is a log parse operation binding the contract event 0x7b992f6c09b22e43cad1f0f9a1d7e41949ac1c53a4eebb7f4b2374605049d2bf.
+//
+// Solidity: event UnfreezeReceiverSet(address indexed unfreezeReceiver)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseUnfreezeReceiverSet(log types.Log) (*Mevcommitavsv3UnfreezeReceiverSet, error) {
+	event := new(Mevcommitavsv3UnfreezeReceiverSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "UnfreezeReceiverSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3UnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UnpausedIterator struct {
+	Event *Mevcommitavsv3Unpaused // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3UnpausedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3Unpaused)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3Unpaused)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3UnpausedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3UnpausedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3Unpaused represents a Unpaused event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3Unpaused struct {
+	Account common.Address
+	Raw     types.Log // Blockchain specific contextual infos
+}
+
+// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa.
+//
+// Solidity: event Unpaused(address account)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterUnpaused(opts *bind.FilterOpts) (*Mevcommitavsv3UnpausedIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "Unpaused")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3UnpausedIterator{contract: _Mevcommitavsv3.contract, event: "Unpaused", logs: logs, sub: sub}, nil
+}
+
+// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa.
+//
+// Solidity: event Unpaused(address account)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3Unpaused) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "Unpaused")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3Unpaused)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "Unpaused", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa.
+//
+// Solidity: event Unpaused(address account)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseUnpaused(log types.Log) (*Mevcommitavsv3Unpaused, error) {
+	event := new(Mevcommitavsv3Unpaused)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "Unpaused", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3UpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3UpgradedIterator struct {
+	Event *Mevcommitavsv3Upgraded // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3UpgradedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3Upgraded)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3Upgraded)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3UpgradedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3UpgradedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3Upgraded represents a Upgraded event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3Upgraded struct {
+	Implementation common.Address
+	Raw            types.Log // Blockchain specific contextual infos
+}
+
+// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b.
+//
+// Solidity: event Upgraded(address indexed implementation)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*Mevcommitavsv3UpgradedIterator, error) {
+
+	var implementationRule []interface{}
+	for _, implementationItem := range implementation {
+		implementationRule = append(implementationRule, implementationItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "Upgraded", implementationRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3UpgradedIterator{contract: _Mevcommitavsv3.contract, event: "Upgraded", logs: logs, sub: sub}, nil
+}
+
+// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b.
+//
+// Solidity: event Upgraded(address indexed implementation)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3Upgraded, implementation []common.Address) (event.Subscription, error) {
+
+	var implementationRule []interface{}
+	for _, implementationItem := range implementation {
+		implementationRule = append(implementationRule, implementationItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "Upgraded", implementationRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3Upgraded)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "Upgraded", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b.
+//
+// Solidity: event Upgraded(address indexed implementation)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseUpgraded(log types.Log) (*Mevcommitavsv3Upgraded, error) {
+	event := new(Mevcommitavsv3Upgraded)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "Upgraded", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3ValidatorDeregPeriodBlocksSetIterator is returned from FilterValidatorDeregPeriodBlocksSet and is used to iterate over the raw logs and unpacked data for ValidatorDeregPeriodBlocksSet events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorDeregPeriodBlocksSetIterator struct {
+	Event *Mevcommitavsv3ValidatorDeregPeriodBlocksSet // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3ValidatorDeregPeriodBlocksSetIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3ValidatorDeregPeriodBlocksSet)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3ValidatorDeregPeriodBlocksSet)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3ValidatorDeregPeriodBlocksSetIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3ValidatorDeregPeriodBlocksSetIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3ValidatorDeregPeriodBlocksSet represents a ValidatorDeregPeriodBlocksSet event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorDeregPeriodBlocksSet struct {
+	ValidatorDeregPeriodBlocks *big.Int
+	Raw                        types.Log // Blockchain specific contextual infos
+}
+
+// FilterValidatorDeregPeriodBlocksSet is a free log retrieval operation binding the contract event 0x38755fd87ce522d770f5627d05f541406a9358d853b64009737f5c4d8913eae7.
+//
+// Solidity: event ValidatorDeregPeriodBlocksSet(uint256 validatorDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterValidatorDeregPeriodBlocksSet(opts *bind.FilterOpts) (*Mevcommitavsv3ValidatorDeregPeriodBlocksSetIterator, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "ValidatorDeregPeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3ValidatorDeregPeriodBlocksSetIterator{contract: _Mevcommitavsv3.contract, event: "ValidatorDeregPeriodBlocksSet", logs: logs, sub: sub}, nil
+}
+
+// WatchValidatorDeregPeriodBlocksSet is a free log subscription operation binding the contract event 0x38755fd87ce522d770f5627d05f541406a9358d853b64009737f5c4d8913eae7.
+//
+// Solidity: event ValidatorDeregPeriodBlocksSet(uint256 validatorDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchValidatorDeregPeriodBlocksSet(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3ValidatorDeregPeriodBlocksSet) (event.Subscription, error) {
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "ValidatorDeregPeriodBlocksSet")
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3ValidatorDeregPeriodBlocksSet)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorDeregPeriodBlocksSet", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseValidatorDeregPeriodBlocksSet is a log parse operation binding the contract event 0x38755fd87ce522d770f5627d05f541406a9358d853b64009737f5c4d8913eae7.
+//
+// Solidity: event ValidatorDeregPeriodBlocksSet(uint256 validatorDeregPeriodBlocks)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseValidatorDeregPeriodBlocksSet(log types.Log) (*Mevcommitavsv3ValidatorDeregPeriodBlocksSet, error) {
+	event := new(Mevcommitavsv3ValidatorDeregPeriodBlocksSet)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorDeregPeriodBlocksSet", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3ValidatorDeregisteredIterator is returned from FilterValidatorDeregistered and is used to iterate over the raw logs and unpacked data for ValidatorDeregistered events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorDeregisteredIterator struct {
+	Event *Mevcommitavsv3ValidatorDeregistered // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3ValidatorDeregisteredIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3ValidatorDeregistered)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3ValidatorDeregistered)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3ValidatorDeregisteredIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3ValidatorDeregisteredIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3ValidatorDeregistered represents a ValidatorDeregistered event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorDeregistered struct {
+	ValidatorPubKey []byte
+	PodOwner        common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterValidatorDeregistered is a free log retrieval operation binding the contract event 0x10ec0bb1533e599e504516d6b49226d8a637ea19cbadfc6f7ff14a01bede3170.
+//
+// Solidity: event ValidatorDeregistered(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterValidatorDeregistered(opts *bind.FilterOpts, podOwner []common.Address) (*Mevcommitavsv3ValidatorDeregisteredIterator, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "ValidatorDeregistered", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3ValidatorDeregisteredIterator{contract: _Mevcommitavsv3.contract, event: "ValidatorDeregistered", logs: logs, sub: sub}, nil
+}
+
+// WatchValidatorDeregistered is a free log subscription operation binding the contract event 0x10ec0bb1533e599e504516d6b49226d8a637ea19cbadfc6f7ff14a01bede3170.
+//
+// Solidity: event ValidatorDeregistered(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchValidatorDeregistered(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3ValidatorDeregistered, podOwner []common.Address) (event.Subscription, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "ValidatorDeregistered", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3ValidatorDeregistered)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorDeregistered", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseValidatorDeregistered is a log parse operation binding the contract event 0x10ec0bb1533e599e504516d6b49226d8a637ea19cbadfc6f7ff14a01bede3170.
+//
+// Solidity: event ValidatorDeregistered(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseValidatorDeregistered(log types.Log) (*Mevcommitavsv3ValidatorDeregistered, error) {
+	event := new(Mevcommitavsv3ValidatorDeregistered)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorDeregistered", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3ValidatorDeregistrationRequestedIterator is returned from FilterValidatorDeregistrationRequested and is used to iterate over the raw logs and unpacked data for ValidatorDeregistrationRequested events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorDeregistrationRequestedIterator struct {
+	Event *Mevcommitavsv3ValidatorDeregistrationRequested // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3ValidatorDeregistrationRequestedIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3ValidatorDeregistrationRequested)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3ValidatorDeregistrationRequested)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3ValidatorDeregistrationRequestedIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3ValidatorDeregistrationRequestedIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3ValidatorDeregistrationRequested represents a ValidatorDeregistrationRequested event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorDeregistrationRequested struct {
+	ValidatorPubKey []byte
+	PodOwner        common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterValidatorDeregistrationRequested is a free log retrieval operation binding the contract event 0x13b70fd48d462f71863cae24350d77b0dc4115a7e928b39dd0f0f60b701ffed3.
+//
+// Solidity: event ValidatorDeregistrationRequested(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterValidatorDeregistrationRequested(opts *bind.FilterOpts, podOwner []common.Address) (*Mevcommitavsv3ValidatorDeregistrationRequestedIterator, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "ValidatorDeregistrationRequested", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3ValidatorDeregistrationRequestedIterator{contract: _Mevcommitavsv3.contract, event: "ValidatorDeregistrationRequested", logs: logs, sub: sub}, nil
+}
+
+// WatchValidatorDeregistrationRequested is a free log subscription operation binding the contract event 0x13b70fd48d462f71863cae24350d77b0dc4115a7e928b39dd0f0f60b701ffed3.
+//
+// Solidity: event ValidatorDeregistrationRequested(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchValidatorDeregistrationRequested(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3ValidatorDeregistrationRequested, podOwner []common.Address) (event.Subscription, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "ValidatorDeregistrationRequested", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3ValidatorDeregistrationRequested)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorDeregistrationRequested", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseValidatorDeregistrationRequested is a log parse operation binding the contract event 0x13b70fd48d462f71863cae24350d77b0dc4115a7e928b39dd0f0f60b701ffed3.
+//
+// Solidity: event ValidatorDeregistrationRequested(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseValidatorDeregistrationRequested(log types.Log) (*Mevcommitavsv3ValidatorDeregistrationRequested, error) {
+	event := new(Mevcommitavsv3ValidatorDeregistrationRequested)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorDeregistrationRequested", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3ValidatorFrozenIterator is returned from FilterValidatorFrozen and is used to iterate over the raw logs and unpacked data for ValidatorFrozen events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorFrozenIterator struct {
+	Event *Mevcommitavsv3ValidatorFrozen // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3ValidatorFrozenIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3ValidatorFrozen)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3ValidatorFrozen)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3ValidatorFrozenIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3ValidatorFrozenIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3ValidatorFrozen represents a ValidatorFrozen event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorFrozen struct {
+	ValidatorPubKey []byte
+	PodOwner        common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterValidatorFrozen is a free log retrieval operation binding the contract event 0x5f565c1dd6cf6dc33dbdfd22c94b541af6ee1390251c8975b0c84106c58654bf.
+//
+// Solidity: event ValidatorFrozen(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterValidatorFrozen(opts *bind.FilterOpts, podOwner []common.Address) (*Mevcommitavsv3ValidatorFrozenIterator, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "ValidatorFrozen", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3ValidatorFrozenIterator{contract: _Mevcommitavsv3.contract, event: "ValidatorFrozen", logs: logs, sub: sub}, nil
+}
+
+// WatchValidatorFrozen is a free log subscription operation binding the contract event 0x5f565c1dd6cf6dc33dbdfd22c94b541af6ee1390251c8975b0c84106c58654bf.
+//
+// Solidity: event ValidatorFrozen(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchValidatorFrozen(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3ValidatorFrozen, podOwner []common.Address) (event.Subscription, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "ValidatorFrozen", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3ValidatorFrozen)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorFrozen", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseValidatorFrozen is a log parse operation binding the contract event 0x5f565c1dd6cf6dc33dbdfd22c94b541af6ee1390251c8975b0c84106c58654bf.
+//
+// Solidity: event ValidatorFrozen(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseValidatorFrozen(log types.Log) (*Mevcommitavsv3ValidatorFrozen, error) {
+	event := new(Mevcommitavsv3ValidatorFrozen)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorFrozen", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3ValidatorRegisteredIterator is returned from FilterValidatorRegistered and is used to iterate over the raw logs and unpacked data for ValidatorRegistered events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorRegisteredIterator struct {
+	Event *Mevcommitavsv3ValidatorRegistered // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3ValidatorRegisteredIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3ValidatorRegistered)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3ValidatorRegistered)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3ValidatorRegisteredIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3ValidatorRegisteredIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3ValidatorRegistered represents a ValidatorRegistered event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorRegistered struct {
+	ValidatorPubKey []byte
+	PodOwner        common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterValidatorRegistered is a free log retrieval operation binding the contract event 0x7cb7aef9bd2e5ee3f6073019691bb332fe3ef290465065aca1b9983f3dc66c56.
+//
+// Solidity: event ValidatorRegistered(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterValidatorRegistered(opts *bind.FilterOpts, podOwner []common.Address) (*Mevcommitavsv3ValidatorRegisteredIterator, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "ValidatorRegistered", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3ValidatorRegisteredIterator{contract: _Mevcommitavsv3.contract, event: "ValidatorRegistered", logs: logs, sub: sub}, nil
+}
+
+// WatchValidatorRegistered is a free log subscription operation binding the contract event 0x7cb7aef9bd2e5ee3f6073019691bb332fe3ef290465065aca1b9983f3dc66c56.
+//
+// Solidity: event ValidatorRegistered(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchValidatorRegistered(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3ValidatorRegistered, podOwner []common.Address) (event.Subscription, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "ValidatorRegistered", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3ValidatorRegistered)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorRegistered", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseValidatorRegistered is a log parse operation binding the contract event 0x7cb7aef9bd2e5ee3f6073019691bb332fe3ef290465065aca1b9983f3dc66c56.
+//
+// Solidity: event ValidatorRegistered(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseValidatorRegistered(log types.Log) (*Mevcommitavsv3ValidatorRegistered, error) {
+	event := new(Mevcommitavsv3ValidatorRegistered)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorRegistered", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
+
+// Mevcommitavsv3ValidatorUnfrozenIterator is returned from FilterValidatorUnfrozen and is used to iterate over the raw logs and unpacked data for ValidatorUnfrozen events raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorUnfrozenIterator struct {
+	Event *Mevcommitavsv3ValidatorUnfrozen // Event containing the contract specifics and raw log
+
+	contract *bind.BoundContract // Generic contract to use for unpacking event data
+	event    string              // Event name to use for unpacking event data
+
+	logs chan types.Log        // Log channel receiving the found contract events
+	sub  ethereum.Subscription // Subscription for errors, completion and termination
+	done bool                  // Whether the subscription completed delivering logs
+	fail error                 // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *Mevcommitavsv3ValidatorUnfrozenIterator) Next() bool {
+	// If the iterator failed, stop iterating
+	if it.fail != nil {
+		return false
+	}
+	// If the iterator completed, deliver directly whatever's available
+	if it.done {
+		select {
+		case log := <-it.logs:
+			it.Event = new(Mevcommitavsv3ValidatorUnfrozen)
+			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+				it.fail = err
+				return false
+			}
+			it.Event.Raw = log
+			return true
+
+		default:
+			return false
+		}
+	}
+	// Iterator still in progress, wait for either a data or an error event
+	select {
+	case log := <-it.logs:
+		it.Event = new(Mevcommitavsv3ValidatorUnfrozen)
+		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+			it.fail = err
+			return false
+		}
+		it.Event.Raw = log
+		return true
+
+	case err := <-it.sub.Err():
+		it.done = true
+		it.fail = err
+		return it.Next()
+	}
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *Mevcommitavsv3ValidatorUnfrozenIterator) Error() error {
+	return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *Mevcommitavsv3ValidatorUnfrozenIterator) Close() error {
+	it.sub.Unsubscribe()
+	return nil
+}
+
+// Mevcommitavsv3ValidatorUnfrozen represents a ValidatorUnfrozen event raised by the Mevcommitavsv3 contract.
+type Mevcommitavsv3ValidatorUnfrozen struct {
+	ValidatorPubKey []byte
+	PodOwner        common.Address
+	Raw             types.Log // Blockchain specific contextual infos
+}
+
+// FilterValidatorUnfrozen is a free log retrieval operation binding the contract event 0x8b4f548363e5182887ee88395b0bacbd44ef955d9b9c1ace7aad0da43af0de40.
+//
+// Solidity: event ValidatorUnfrozen(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) FilterValidatorUnfrozen(opts *bind.FilterOpts, podOwner []common.Address) (*Mevcommitavsv3ValidatorUnfrozenIterator, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.FilterLogs(opts, "ValidatorUnfrozen", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return &Mevcommitavsv3ValidatorUnfrozenIterator{contract: _Mevcommitavsv3.contract, event: "ValidatorUnfrozen", logs: logs, sub: sub}, nil
+}
+
+// WatchValidatorUnfrozen is a free log subscription operation binding the contract event 0x8b4f548363e5182887ee88395b0bacbd44ef955d9b9c1ace7aad0da43af0de40.
+//
+// Solidity: event ValidatorUnfrozen(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) WatchValidatorUnfrozen(opts *bind.WatchOpts, sink chan<- *Mevcommitavsv3ValidatorUnfrozen, podOwner []common.Address) (event.Subscription, error) {
+
+	var podOwnerRule []interface{}
+	for _, podOwnerItem := range podOwner {
+		podOwnerRule = append(podOwnerRule, podOwnerItem)
+	}
+
+	logs, sub, err := _Mevcommitavsv3.contract.WatchLogs(opts, "ValidatorUnfrozen", podOwnerRule)
+	if err != nil {
+		return nil, err
+	}
+	return event.NewSubscription(func(quit <-chan struct{}) error {
+		defer sub.Unsubscribe()
+		for {
+			select {
+			case log := <-logs:
+				// New log arrived, parse the event and forward to the user
+				event := new(Mevcommitavsv3ValidatorUnfrozen)
+				if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorUnfrozen", log); err != nil {
+					return err
+				}
+				event.Raw = log
+
+				select {
+				case sink <- event:
+				case err := <-sub.Err():
+					return err
+				case <-quit:
+					return nil
+				}
+			case err := <-sub.Err():
+				return err
+			case <-quit:
+				return nil
+			}
+		}
+	}), nil
+}
+
+// ParseValidatorUnfrozen is a log parse operation binding the contract event 0x8b4f548363e5182887ee88395b0bacbd44ef955d9b9c1ace7aad0da43af0de40.
+//
+// Solidity: event ValidatorUnfrozen(bytes validatorPubKey, address indexed podOwner)
+func (_Mevcommitavsv3 *Mevcommitavsv3Filterer) ParseValidatorUnfrozen(log types.Log) (*Mevcommitavsv3ValidatorUnfrozen, error) {
+	event := new(Mevcommitavsv3ValidatorUnfrozen)
+	if err := _Mevcommitavsv3.contract.UnpackLog(event, "ValidatorUnfrozen", log); err != nil {
+		return nil, err
+	}
+	event.Raw = log
+	return event, nil
+}
diff --git a/contracts-abi/script.sh b/contracts-abi/script.sh
index b2269361f..c41135e97 100755
--- a/contracts-abi/script.sh
+++ b/contracts-abi/script.sh
@@ -40,6 +40,8 @@ extract_and_save_abi "$BASE_DIR/out/BlockTracker.sol/BlockTracker.json" "$ABI_DI
 
 extract_and_save_abi "$BASE_DIR/out/MevCommitAVS.sol/MevCommitAVS.json" "$ABI_DIR/MevCommitAVS.abi"
 
+extract_and_save_abi "$BASE_DIR/out/MevCommitAVSV3.sol/MevCommitAVSV3.json" "$ABI_DIR/MevCommitAVSV3.abi"
+
 extract_and_save_abi "$BASE_DIR/out/ValidatorOptInRouter.sol/ValidatorOptInRouter.json" "$ABI_DIR/ValidatorOptInRouter.abi"
 
 echo "ABI files extracted successfully."
@@ -89,6 +91,8 @@ generate_go_code "$ABI_DIR/BlockTracker.abi" "BlockTracker" "blocktracker"
 
 generate_go_code "$ABI_DIR/MevCommitAVS.abi" "MevCommitAVS" "mevcommitavs"
 
+generate_go_code "$ABI_DIR/MevCommitAVSV3.abi" "MevCommitAVSV3" "mevcommitavsv3"
+
 generate_go_code "$ABI_DIR/ValidatorOptInRouter.abi" "ValidatorOptInRouter" "validatoroptinrouter"
 
 echo "Go code generated successfully in separate folders."
diff --git a/contracts/Makefile b/contracts/Makefile
index 567e71af8..01ce48974 100644
--- a/contracts/Makefile
+++ b/contracts/Makefile
@@ -32,6 +32,14 @@ upgrade-avs-anvil:
 		--via-ir \
 		--broadcast
 
+upgrade-avs-anvil-v2-to-v3:
+	forge clean
+	forge script scripts/validator-registry/avs/UpgradeAVSV2ToV3.s.sol:UpgradeAnvil \
+		--rpc-url http://localhost:8545 \
+		--private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \
+		--via-ir \
+		--broadcast
+
 run-stake-example:
 	forge script scripts/validator-registry/ValidatorExampleScript.s.sol:StakeExample --rpc-url http://localhost:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --via-ir --broadcast
 
diff --git a/contracts/contracts/interfaces/IMevCommitAVSV3.sol b/contracts/contracts/interfaces/IMevCommitAVSV3.sol
new file mode 100644
index 000000000..fc47b6b77
--- /dev/null
+++ b/contracts/contracts/interfaces/IMevCommitAVSV3.sol
@@ -0,0 +1,211 @@
+// SPDX-License-Identifier: BSL 1.1
+pragma solidity 0.8.20;
+
+import {ISignatureUtils} from "eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol";
+import {EventHeightLib} from "../utils/EventHeight.sol";
+import {IDelegationManager} from "eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol";
+import {IEigenPodManager} from "eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol";
+import {IStrategyManager} from "eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol";
+import {IAVSDirectory} from "eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol";
+
+/// @title IMevCommitAVSV3
+/// @notice Interface for MevCommitAVSV3, incorporating changes from https://github.com/primev/mev-commit/pull/393.
+interface IMevCommitAVSV3 {
+
+    /// @notice Struct representing MevCommitAVS registration info for an operator
+    struct OperatorRegistrationInfo {
+        /// @notice Whether the operator is registered with MevCommitAVS
+        bool exists;
+        /// @notice Height at which the operator possibly requested deregistration
+        EventHeightLib.EventHeight deregRequestHeight;
+    }
+
+    /// @notice Struct representing MevCommitAVS registration info for a validator
+    struct ValidatorRegistrationInfo {
+        /// @notice Whether the validator is registered with MevCommitAVS
+        bool exists;
+        /// @notice Address of the pod owner for the validator
+        address podOwner;
+        /// @notice Height at which the validator was possibly frozen
+        EventHeightLib.EventHeight freezeHeight;
+        /// @notice Height at which the validator possibly requested deregistration
+        EventHeightLib.EventHeight deregRequestHeight;
+    }
+
+    /// @notice Struct representing MevCommitAVS registration info for a LST restaker
+    struct LSTRestakerRegistrationInfo {
+        /// @notice Whether the LST restaker is registered with MevCommitAVS
+        bool exists;
+        /// @notice Address of validator(s) chosen by the LST restaker, which equally represent the restaker
+        bytes[] chosenValidators;
+        /// @notice Total number of validators chosen by the LST restaker, where attribution is split evenly
+        uint256 numChosen;
+        /// @notice Height at which the LST restaker possibly requested deregistration
+        EventHeightLib.EventHeight deregRequestHeight;
+    }
+
+    /// @notice Emmitted when an operator is registered with MevCommitAVS
+    event OperatorRegistered(address indexed operator);
+
+    /// @notice Emmitted when a deregistration request is made for an operator
+    event OperatorDeregistrationRequested(address indexed operator);
+
+    /// @notice Emmitted when an operator is deregistered from MevCommitAVS
+    event OperatorDeregistered(address indexed operator);
+
+    /// @notice Emmitted when a validator is registered with MevCommitAVS
+    event ValidatorRegistered(bytes validatorPubKey, address indexed podOwner);
+
+    /// @notice Emmitted when a deregistration request is made for a validator
+    event ValidatorDeregistrationRequested(bytes validatorPubKey, address indexed podOwner);
+
+    /// @notice Emmitted when a validator is deregistered from MevCommitAVS
+    event ValidatorDeregistered(bytes validatorPubKey, address indexed podOwner);
+
+    /// @notice Emmitted when a LST restaker registers (chooses a validator) with MevCommitAVS
+    /// @dev numChosen is the total number of validators chosen by the LST restaker, where attribution is split evenly.
+    event LSTRestakerRegistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker);
+
+    /// @notice Emmitted when a deregistration request is made by an LST restaker
+    /// @dev numChosen is the total number of validators chosen by the LST restaker, where attribution is split evenly.
+    event LSTRestakerDeregistrationRequested(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker);
+
+    /// @notice Emmitted when a LST restaker is deregistered from MevCommitAVS
+    /// @dev numChosen is the total number of validators chosen by the LST restaker, where attribution is split evenly.
+    event LSTRestakerDeregistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker);
+
+    /// @notice Emmitted when a validator is frozen by the oracle
+    event ValidatorFrozen(bytes validatorPubKey, address indexed podOwner);
+
+    /// @notice Emmitted when a validator is unfrozen
+    event ValidatorUnfrozen(bytes validatorPubKey, address indexed podOwner);
+
+    /// @notice Emitted when the AVS directory is set
+    event AVSDirectorySet(address indexed avsDirectory);
+
+    /// @notice Emitted when the strategy manager is set
+    event StrategyManagerSet(address indexed strategyManager);
+
+    /// @notice Emitted when the delegation manager is set
+    event DelegationManagerSet(address indexed delegationManager);
+
+    /// @notice Emitted when the EigenPod manager is set
+    event EigenPodManagerSet(address indexed eigenPodManager);
+
+    /// @notice Emitted when the restakeable strategies are set
+    event RestakeableStrategiesSet(address[] indexed restakeableStrategies);
+
+    /// @notice Emitted when the freeze oracle is set
+    event FreezeOracleSet(address indexed freezeOracle);
+
+    /// @notice Emitted when the unfreeze fee is set
+    event UnfreezeFeeSet(uint256 unfreezeFee);
+
+    /// @notice Emitted when the unfreeze receiver is set
+    event UnfreezeReceiverSet(address indexed unfreezeReceiver);
+
+    /// @notice Emitted when the unfreeze period is set
+    event UnfreezePeriodBlocksSet(uint256 unfreezePeriodBlocks);
+
+    /// @notice Emitted when the operator deregistration period is set
+    event OperatorDeregPeriodBlocksSet(uint256 operatorDeregPeriodBlocks);
+
+    /// @notice Emitted when the validator deregistration period is set
+    event ValidatorDeregPeriodBlocksSet(uint256 validatorDeregPeriodBlocks);
+
+    /// @notice Emitted when the LST restaker deregistration period is set
+    event LSTRestakerDeregPeriodBlocksSet(uint256 lstRestakerDeregPeriodBlocks);
+
+    /// @dev Registers an operator with the MevCommitAVS.
+    function registerOperator(ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature) external;
+
+    /// @dev Allows an operator to request deregistration from the MevCommitAVS.
+    function requestOperatorDeregistration(address operator) external;
+
+    /// @dev Allows an operator to deregister from the MevCommitAVS.
+    function deregisterOperator(address operator) external;
+
+    /// @dev Registers sets of validator pubkeys associated to one or more pod owners.
+    function registerValidatorsByPodOwners(bytes[][] calldata valPubKeys, address[] calldata podOwners) external;
+
+    /// @dev Allows a validator to request deregistration from the MevCommitAVS.
+    function requestValidatorsDeregistration(bytes[] calldata valPubKeys) external;
+
+    /// @dev Allows a validator to deregister from the MevCommitAVS.
+    function deregisterValidators(bytes[] calldata valPubKeys) external;
+
+    /// @dev Registers sender as an LST restaker with chosen validators.
+    function registerLSTRestaker(bytes[] calldata chosenValidators) external;
+
+    /// @dev Allows an LST restaker to request deregistration from the MevCommitAVS.
+    function requestLSTRestakerDeregistration() external;
+
+    /// @dev Allows an LST restaker to deregister from the MevCommitAVS.
+    function deregisterLSTRestaker() external;
+
+    /// @dev Allows the freeze oracle account to freeze validators which disobey the mev-commit protocol.
+    function freeze(bytes[] calldata valPubKeys) external;
+
+    /// @dev Allows any account to unfreeze validators which have been frozen, for a fee.
+    function unfreeze(bytes[] calldata valPubKeys) external payable;
+
+    /// @dev Pauses the contract, restricted to contract owner.
+    function pause() external;
+
+    /// @dev Unpauses the contract, restricted to contract owner.
+    function unpause() external;
+
+    /// @dev Sets the AVS directory, restricted to contract owner.
+    function setAVSDirectory(IAVSDirectory avsDirectory_) external;
+
+    /// @dev Sets the strategy manager, restricted to contract owner.
+    function setStrategyManager(IStrategyManager strategyManager_) external;
+
+    /// @dev Sets the delegation manager, restricted to contract owner.
+    function setDelegationManager(IDelegationManager delegationManager_) external;
+
+    /// @dev Sets the EigenPod manager, restricted to contract owner.
+    function setEigenPodManager(IEigenPodManager eigenPodManager_) external;
+
+    /// @dev Sets the restakeable strategies, restricted to contract owner.
+    function setRestakeableStrategies(address[] calldata restakeableStrategies_) external;
+
+    /// @dev Sets the freeze oracle account, restricted to contract owner.
+    function setFreezeOracle(address freezeOracle_) external;
+
+    /// @dev Sets the unfreeze fee, restricted to contract owner.
+    function setUnfreezeFee(uint256 unfreezeFee_) external;
+
+    /// @dev Sets the unfreeze receiver, restricted to contract owner.
+    function setUnfreezeReceiver(address unfreezeReceiver_) external;
+
+    /// @dev Sets the unfreeze period in blocks, restricted to contract owner.
+    function setUnfreezePeriodBlocks(uint256 unfreezePeriodBlocks_) external;
+
+    /// @dev Sets the operator deregistration period in blocks, restricted to contract owner.
+    function setOperatorDeregPeriodBlocks(uint256 operatorDeregPeriodBlocks_) external;
+
+    /// @dev Sets the validator deregistration period in blocks, restricted to contract owner.
+    function setValidatorDeregPeriodBlocks(uint256 validatorDeregPeriodBlocks_) external;
+
+    /// @dev Sets the LST restaker deregistration period in blocks, restricted to contract owner.
+    function setLstRestakerDeregPeriodBlocks(uint256 lstRestakerDeregPeriodBlocks_) external;
+
+    /// @dev Updates the eigenlayer metadata URI, restricted to contract owner.
+    function updateMetadataURI(string memory metadataURI_) external;
+
+    /// @dev Checks if a validator is opted-in.
+    function isValidatorOptedIn(bytes calldata valPubKey) external view returns (bool);
+
+    /// @dev Returns operator registration info.
+    function getOperatorRegInfo(address operator) external view returns (OperatorRegistrationInfo memory);
+
+    /// @dev Returns validator registration info.
+    function getValidatorRegInfo(bytes calldata valPubKey) external view returns (ValidatorRegistrationInfo memory);
+
+    /// @dev Returns LST restaker registration info.
+    function getLSTRestakerRegInfo(address lstRestaker) external view returns (LSTRestakerRegistrationInfo memory);
+
+    /// @dev Returns the address of AVS directory.
+    function avsDirectory() external view returns (address);
+}
diff --git a/contracts/contracts/validator-registry/avs/MevCommitAVSStorageV3.sol b/contracts/contracts/validator-registry/avs/MevCommitAVSStorageV3.sol
new file mode 100644
index 000000000..d9c8b311c
--- /dev/null
+++ b/contracts/contracts/validator-registry/avs/MevCommitAVSStorageV3.sol
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: BSL 1.1
+pragma solidity 0.8.20;
+
+
+import {IMevCommitAVSV3} from "../../interfaces/IMevCommitAVSV3.sol";
+import {IDelegationManager} from "eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol";
+import {IEigenPodManager} from "eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol";
+import {IStrategyManager} from "eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol";
+import {IAVSDirectory} from "eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol";
+
+abstract contract MevCommitAVSStorageV3 {
+
+    /// @notice reference to eigenlayer core delegation manager contract
+    IDelegationManager internal _delegationManager;
+
+    /// @notice reference to eigenlayer core eigenpod manager contract
+    IEigenPodManager internal _eigenPodManager;
+
+    /// @notice reference to eigenlayer core strategy manager contract
+    IStrategyManager internal _strategyManager;
+
+    /// @notice reference to eigenlayer core AVS directory contract
+    IAVSDirectory internal _eigenAVSDirectory;
+
+    /// @notice Mapping of operator addresses to their registration info
+    mapping(address => IMevCommitAVSV3.OperatorRegistrationInfo) public operatorRegistrations;
+
+    /// @notice Mapping of validator pubkeys to their registration info
+    mapping(bytes => IMevCommitAVSV3.ValidatorRegistrationInfo) public validatorRegistrations;
+
+    /// @notice Mapping of LST restaker address to their registration info
+    mapping(address => IMevCommitAVSV3.LSTRestakerRegistrationInfo) public lstRestakerRegistrations;
+
+    /// @notice List of restakeable strategy addresses
+    address[] public restakeableStrategies;
+
+    /// @notice Address of the oracle responsible for freezing validators.
+    address public freezeOracle;
+
+    /// @notice Fee required to unfreeze a validator.
+    uint256 public unfreezeFee;
+
+    /// @notice Address that will receive unfreeze fees from frozen validators.
+    address public unfreezeReceiver;
+
+    /**
+     * @notice Number of blocks a validator must remain frozen before it can be unfrozen.
+     * This is param is optional to allow frozen validators to pay the fee immediately.
+     */
+    uint256 public unfreezePeriodBlocks;
+
+    /// @notice Number of blocks an operator must wait after requesting deregistration before it is finalized.
+    uint256 public operatorDeregPeriodBlocks;
+
+    /// @notice Number of blocks a validator must wait after requesting deregistration before it is finalized.
+    uint256 public validatorDeregPeriodBlocks;
+
+    /// @notice Number of blocks a LST restaker must wait after requesting deregistration before it is finalized.
+    uint256 public lstRestakerDeregPeriodBlocks;
+}
diff --git a/contracts/contracts/validator-registry/avs/MevCommitAVSV3.sol b/contracts/contracts/validator-registry/avs/MevCommitAVSV3.sol
new file mode 100644
index 000000000..ef84b46fa
--- /dev/null
+++ b/contracts/contracts/validator-registry/avs/MevCommitAVSV3.sol
@@ -0,0 +1,655 @@
+// SPDX-License-Identifier: BSL 1.1
+pragma solidity 0.8.20;
+
+import {IMevCommitAVSV3} from "../../interfaces/IMevCommitAVSV3.sol";
+import {MevCommitAVSStorageV3} from "./MevCommitAVSStorageV3.sol";
+import {EventHeightLib} from "../../utils/EventHeight.sol";
+import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol";
+import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
+import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
+import {IDelegationManager} from "eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol";
+import {IEigenPodManager} from "eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol";
+import {IEigenPod} from "eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol";
+import {IAVSDirectory} from "eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol";
+import {ISignatureUtils} from "eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol";
+import {IStrategyManager} from "eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol";
+import {Errors} from "../../utils/Errors.sol";
+
+/// @title MevCommitAVSV3
+/// @notice Third upgrade version of MevCommitAVS, incorporating changes from https://github.com/primev/mev-commit/pull/393.
+/// @custom:oz-upgrades-from MevCommitAVSV2
+contract MevCommitAVSV3 is IMevCommitAVSV3, MevCommitAVSStorageV3,
+    Ownable2StepUpgradeable, PausableUpgradeable, UUPSUpgradeable {
+    
+    /// @dev Modifier to ensure the provided operator is registered with MevCommitAVSV3.
+    modifier onlyRegisteredOperator(address operator) {
+        require(operatorRegistrations[operator].exists, "operator not registered");
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is not a registered operator with MevCommitAVSV3.
+    modifier onlyNonRegisteredOperator() {
+        require(!operatorRegistrations[msg.sender].exists, "sender is registered operator");
+        _;
+    }
+
+    /// @dev Modifier to ensure all provided validators are registered with MevCommitAVSV3.
+    modifier onlyRegisteredValidators(bytes[] calldata valPubKeys) {
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            require(validatorRegistrations[valPubKeys[i]].exists, "validator not registered");
+        }
+        _;
+    }
+
+    /// @dev Modifier to ensure all provided validators are not registered with MevCommitAVSV3.
+    modifier onlyNonRegisteredValidators(bytes[] calldata valPubKeys) {
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            require(!validatorRegistrations[valPubKeys[i]].exists, "validator is registered");
+        }
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is a registered LST restaker with MevCommitAVSV3.
+    modifier onlyRegisteredLstRestaker() {
+        require(lstRestakerRegistrations[msg.sender].exists, "LST restaker not registered");
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is not a registered LST restaker with MevCommitAVSV3.
+    modifier onlyNonRegisteredLstRestaker() {
+        require(!lstRestakerRegistrations[msg.sender].exists, "LST restaker is registered");
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is the MevCommitAVSV3 freeze oracle account.
+    modifier onlyFreezeOracle() {
+        require(msg.sender == freezeOracle, "sender isnt freeze oracle");
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is registered as an operator with the eigenlayer core contracts.
+    modifier onlyEigenCoreOperator() {
+        require(_delegationManager.isOperator(msg.sender), "sender isnt eigen core operator");
+        _;
+    }
+    
+    /// @dev Modifier to ensure the sender is the given operator 
+    modifier onlyOperator(address operator) {
+        require(msg.sender == operator, "sender isnt specified operator");
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is either the given pod owner, 
+    /// or the delegated operator for the given pod owner.
+    modifier onlyPodOwnerOrOperator(address podOwner) {
+        require(msg.sender == podOwner || msg.sender == _delegationManager.delegatedTo(podOwner), 
+            "sender not podOwner or operator");
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is either the pod owner or operator of all the given validators.
+    modifier onlyPodOwnerOrOperatorOfValidators(bytes[] calldata valPubKeys) {
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            IMevCommitAVSV3.ValidatorRegistrationInfo memory regInfo = validatorRegistrations[valPubKeys[i]];
+            require(msg.sender == regInfo.podOwner || msg.sender == _delegationManager.delegatedTo(regInfo.podOwner),
+                "sender not podOwner or operator");
+        }
+        _;
+    }
+
+    /// @dev Modifier to ensure the sender is delegated to a registered operator.
+    modifier onlySenderWithRegisteredOperator() {
+        address delegatedOperator = _delegationManager.delegatedTo(msg.sender);
+        require(operatorRegistrations[delegatedOperator].exists,
+            "no delegation to reg operator");
+        _;
+    }
+
+    /// @dev Modifier to ensure all provided validators are frozen.
+    modifier onlyFrozenValidators(bytes[] calldata valPubKeys) {
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            require(validatorRegistrations[valPubKeys[i]].freezeHeight.exists, "validator not frozen");
+        }
+        _;
+    }
+
+    /// @dev See https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#initializing_the_implementation_contract
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        _disableInitializers();
+    }
+
+    /// @dev Initializes the contract with provided parameters.
+    function initialize(
+        address owner_,
+        IDelegationManager delegationManager_,
+        IEigenPodManager eigenPodManager_,
+        IStrategyManager strategyManager_,
+        IAVSDirectory avsDirectory_,
+        address[] calldata restakeableStrategies_,
+        address freezeOracle_,
+        uint256 unfreezeFee_,
+        address unfreezeReceiver_,
+        uint256 unfreezePeriodBlocks_,
+        uint256 operatorDeregPeriodBlocks_,
+        uint256 validatorDeregPeriodBlocks_,
+        uint256 lstRestakerDeregPeriodBlocks_,
+        string calldata metadataURI_
+    ) external initializer {
+        _setDelegationManager(delegationManager_);
+        _setEigenPodManager(eigenPodManager_);
+        _setStrategyManager(strategyManager_);
+        _setAVSDirectory(avsDirectory_);
+        _setRestakeableStrategies(restakeableStrategies_);
+        _setFreezeOracle(freezeOracle_);
+        _setUnfreezeFee(unfreezeFee_);
+        _setUnfreezeReceiver(unfreezeReceiver_);
+        _setUnfreezePeriodBlocks(unfreezePeriodBlocks_);
+        _setOperatorDeregPeriodBlocks(operatorDeregPeriodBlocks_);
+        _setValidatorDeregPeriodBlocks(validatorDeregPeriodBlocks_);
+        _setLstRestakerDeregPeriodBlocks(lstRestakerDeregPeriodBlocks_);
+        if (bytes(metadataURI_).length != 0) {
+            _updateMetadataURI(metadataURI_);
+        }
+        __Ownable_init(owner_);
+        __UUPSUpgradeable_init();
+        __Pausable_init();
+    }
+
+    /// @dev Receive function to prevent unintended contract interactions.
+    receive() external payable {
+        revert Errors.InvalidReceive();
+    }
+
+    /// @dev Fallback function to prevent unintended contract interactions.
+    fallback() external payable {
+        revert Errors.InvalidFallback();
+    }
+
+    /// @dev Registers an operator with the MevCommitAVSV3.
+    function registerOperator (
+        ISignatureUtils.SignatureWithSaltAndExpiry calldata operatorSignature
+    ) external whenNotPaused() onlyNonRegisteredOperator() onlyEigenCoreOperator() {
+        _registerOperator(operatorSignature);
+    }
+
+    /// @dev Allows an operator to request deregistration from the MevCommitAVSV3.
+    function requestOperatorDeregistration(address operator
+    ) external whenNotPaused() onlyRegisteredOperator(operator) onlyOperator(operator) {
+        _requestOperatorDeregistration(operator);
+    }
+
+    /// @dev Allows an operator to deregister from the MevCommitAVSV3.
+    function deregisterOperator(address operator
+    ) external whenNotPaused() onlyRegisteredOperator(operator) onlyOperator(operator) {
+        _deregisterOperator(operator);
+    }
+
+    /// @dev Registers sets of validator pubkeys associated to one or more pod owners.
+    /// @notice The underlying _registerValidatorsByPodOwner enforces the sender is either
+    /// the provided pod owner, or the delegated operator for each pod owner.
+    function registerValidatorsByPodOwners(
+        bytes[][] calldata valPubKeys,
+        address[] calldata podOwners
+    ) external whenNotPaused() {
+        uint256 len = podOwners.length;
+        for (uint256 i = 0; i < len; ++i) {
+            _registerValidatorsByPodOwner(valPubKeys[i], podOwners[i]);
+        }
+    }
+
+    /// @dev Allows a validator to request deregistration from the MevCommitAVSV3.
+    /// @notice For each validator the underlying _requestValidatorDeregistration enforces the sender is either
+    /// the podOwner, delegated operator, or the contract owner.
+    function requestValidatorsDeregistration(bytes[] calldata valPubKeys)
+        external whenNotPaused() onlyRegisteredValidators(valPubKeys) onlyPodOwnerOrOperatorOfValidators(valPubKeys) {
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            _requestValidatorDeregistration(valPubKeys[i]);
+        }
+    }
+
+    /// @dev Allows a validator to deregister from the MevCommitAVSV3.
+    /// @notice For each validator the underlying _deregisterValidator enforces the sender is either
+    /// the podOwner, delegated operator, or the contract owner.
+    function deregisterValidators(bytes[] calldata valPubKeys)
+        external whenNotPaused() onlyRegisteredValidators(valPubKeys) onlyPodOwnerOrOperatorOfValidators(valPubKeys) {
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            _deregisterValidator(valPubKeys[i]);
+        }
+    }
+
+    /// @dev Registers sender as an LST restaker with chosen validators.
+    function registerLSTRestaker(bytes[] calldata chosenValidators)
+        external whenNotPaused() onlyNonRegisteredLstRestaker() onlySenderWithRegisteredOperator() {
+        _registerLSTRestaker(chosenValidators);
+    }
+
+    /// @dev Allows an LST restaker to request deregistration from the MevCommitAVSV3.
+    function requestLSTRestakerDeregistration() external whenNotPaused() onlyRegisteredLstRestaker() {
+        _requestLSTRestakerDeregistration();
+    }
+
+    /// @dev Allows an LST restaker to deregister from the MevCommitAVSV3.
+    function deregisterLSTRestaker() external whenNotPaused() onlyRegisteredLstRestaker() {
+        _deregisterLSTRestaker();
+    }
+
+    /// @dev Allows the freeze oracle account to freeze validators which disobey the mev-commit protocol.
+    function freeze(bytes[] calldata valPubKeys) external
+        whenNotPaused() onlyRegisteredValidators(valPubKeys) onlyFreezeOracle() {
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            _freeze(valPubKeys[i]);
+        }
+    }
+
+    /// @dev Allows any account to unfreeze validators which have been frozen, for a fee.
+    function unfreeze(bytes[] calldata valPubKey) external payable
+        whenNotPaused() onlyRegisteredValidators(valPubKey) onlyFrozenValidators(valPubKey) {
+        uint256 requiredFee = unfreezeFee * valPubKey.length;
+        require(msg.value >= requiredFee,
+            "unfreeze fee required per val");
+        uint256 len = valPubKey.length;
+        for (uint256 i = 0; i < len; ++i) {
+            _unfreeze(valPubKey[i]);
+        }
+        (bool success, ) = unfreezeReceiver.call{value: requiredFee}("");
+        require(success, "unfreeze transfer failed");
+        uint256 excessFee = msg.value - requiredFee;
+        if (excessFee != 0) {
+            (bool successRefund, ) = msg.sender.call{value: excessFee}("");
+            require(successRefund, "refund failed");
+        }
+    }
+
+    /// @dev Pauses the contract, restricted to contract owner.
+    function pause() external onlyOwner {
+        _pause();
+    }
+
+    /// @dev Unpauses the contract, restricted to contract owner.
+    function unpause() external onlyOwner {
+        _unpause();
+    }
+
+    /// @dev Sets the AVS directory, restricted to contract owner.
+    function setAVSDirectory(IAVSDirectory avsDirectory_) external onlyOwner {
+        _setAVSDirectory(avsDirectory_);
+    }
+
+    /// @dev Sets the strategy manager, restricted to contract owner.
+    function setStrategyManager(IStrategyManager strategyManager_) external onlyOwner {
+        _setStrategyManager(strategyManager_);
+    }
+
+    /// @dev Sets the delegation manager, restricted to contract owner.
+    function setDelegationManager(IDelegationManager delegationManager_) external onlyOwner {
+        _setDelegationManager(delegationManager_);
+    }
+
+    /// @dev Sets the EigenPod manager, restricted to contract owner.
+    function setEigenPodManager(IEigenPodManager eigenPodManager_) external onlyOwner {
+        _setEigenPodManager(eigenPodManager_);
+    }
+
+    /// @dev Sets the restakeable strategies, restricted to contract owner.
+    function setRestakeableStrategies(address[] calldata restakeableStrategies_) external onlyOwner {
+        _setRestakeableStrategies(restakeableStrategies_);
+    }
+
+    /// @dev Sets the freeze oracle account, restricted to contract owner.
+    function setFreezeOracle(address freezeOracle_) external onlyOwner {
+        _setFreezeOracle(freezeOracle_);
+    }
+
+    /// @dev Sets the unfreeze fee, restricted to contract owner.
+    function setUnfreezeFee(uint256 unfreezeFee_) external onlyOwner {
+        _setUnfreezeFee(unfreezeFee_);
+    }
+
+    /// @dev Sets the unfreeze receiver, restricted to contract owner.
+    function setUnfreezeReceiver(address unfreezeReceiver_) external onlyOwner {
+        _setUnfreezeReceiver(unfreezeReceiver_);
+    }
+
+    /// @dev Sets the unfreeze period in blocks, restricted to contract owner.
+    function setUnfreezePeriodBlocks(uint256 unfreezePeriodBlocks_) external onlyOwner {
+        _setUnfreezePeriodBlocks(unfreezePeriodBlocks_);
+    }
+
+    /// @dev Sets the operator deregistration period inblocks, restricted to contract owner.
+    function setOperatorDeregPeriodBlocks(uint256 operatorDeregPeriodBlocks_) external onlyOwner {
+        _setOperatorDeregPeriodBlocks(operatorDeregPeriodBlocks_);
+    }
+
+    /// @dev Sets the validator deregistration period in blocks, restricted to contract owner.
+    function setValidatorDeregPeriodBlocks(uint256 validatorDeregPeriodBlocks_) external onlyOwner {
+        _setValidatorDeregPeriodBlocks(validatorDeregPeriodBlocks_);
+    }
+
+    /// @dev Sets the LST restaker deregistration period in blocks, restricted to contract owner.
+    function setLstRestakerDeregPeriodBlocks(uint256 lstRestakerDeregPeriodBlocks_) external onlyOwner {
+        _setLstRestakerDeregPeriodBlocks(lstRestakerDeregPeriodBlocks_);
+    }
+
+    /// @dev Updates the eigenlayer metadata URI, restricted to contract owner.
+    function updateMetadataURI(string calldata metadataURI_) external onlyOwner {
+        _updateMetadataURI(metadataURI_);
+    }
+
+    /// @dev Returns the list of restakeable strategies.
+    function getRestakeableStrategies() external view returns (address[] memory) {
+        return _getRestakeableStrategies();
+    }
+
+    /// @dev Returns the restakeable strategies for a given operator.
+    function getOperatorRestakedStrategies(address operator) external view returns (address[] memory) {
+        if (!operatorRegistrations[operator].exists) {
+            return new address[](0);
+        }
+        return _getRestakeableStrategies();
+    }
+
+    /// @dev Checks if a validator is opted-in.
+    function isValidatorOptedIn(bytes calldata valPubKey) external view returns (bool) {
+        return _isValidatorOptedIn(valPubKey);
+    }
+
+    /// @dev Returns operator registration info.
+    function getOperatorRegInfo(address operator) external view returns (OperatorRegistrationInfo memory) {
+        return operatorRegistrations[operator];
+    }
+
+    /// @dev Returns validator registration info.
+    function getValidatorRegInfo(bytes calldata valPubKey) external view returns (ValidatorRegistrationInfo memory) {
+        return validatorRegistrations[valPubKey];
+    }
+
+    /// @dev Returns LST restaker registration info.
+    function getLSTRestakerRegInfo(address lstRestaker) 
+        external view returns (LSTRestakerRegistrationInfo memory) {
+        return lstRestakerRegistrations[lstRestaker];
+    }
+
+    /// @dev Returns the address of AVS directory.
+    function avsDirectory() external view returns (address) {
+        return address(_eigenAVSDirectory);
+    }
+
+    /// @dev Authorizes contract upgrades, restricted to contract owner.
+    // solhint-disable-next-line no-empty-blocks
+    function _authorizeUpgrade(address) internal override onlyOwner {}
+
+    /// @dev Internal function to register an operator.
+    function _registerOperator(ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature) internal {
+        _eigenAVSDirectory.registerOperatorToAVS(msg.sender, operatorSignature);
+        operatorRegistrations[msg.sender] = OperatorRegistrationInfo({
+            exists: true,
+            deregRequestHeight: EventHeightLib.EventHeight({
+                exists: false,
+                blockHeight: 0
+            })
+        });
+        emit OperatorRegistered(msg.sender);
+    }
+
+    /// @dev Internal function to request deregistration of an operator.
+    function _requestOperatorDeregistration(address operator) internal {
+        require(!operatorRegistrations[operator].deregRequestHeight.exists,
+            "operator dereg already req");
+        EventHeightLib.set(operatorRegistrations[operator].deregRequestHeight, block.number);
+        emit OperatorDeregistrationRequested(operator);
+    }
+
+    /// @dev Internal function to deregister an operator.
+    function _deregisterOperator(address operator) internal {
+        require(operatorRegistrations[operator].deregRequestHeight.exists, "dereg not requested");
+        require(block.number > operatorRegistrations[operator].deregRequestHeight.blockHeight + operatorDeregPeriodBlocks,
+            "dereg too soon");
+        _eigenAVSDirectory.deregisterOperatorFromAVS(operator);
+        delete operatorRegistrations[operator];
+        emit OperatorDeregistered(operator);
+    }
+
+    /// @dev Internal function to register validators by their pod owner.
+    /// @notice Invalid pubkeys should not correspond to VALIDATOR_STATUS.ACTIVE due to validations in EigenPod.sol
+    /// @dev A successful call to this function gauruntees isValidatorOptedIn() returns true for each pubkey immediately after
+    /// this function returns. However, sucessive state-changes (ex: delegated operator deregisters) may result in changes
+    /// to validator opt-in state.
+    function _registerValidatorsByPodOwner(
+        bytes[] calldata valPubKeys,
+        address podOwner
+    ) internal onlyNonRegisteredValidators(valPubKeys) onlyPodOwnerOrOperator(podOwner)  {
+        address operator = _delegationManager.delegatedTo(podOwner);
+        require(operatorRegistrations[operator].exists,
+            "operator not registered");
+        require(!operatorRegistrations[operator].deregRequestHeight.exists,
+            "operator dereg already req");
+        IEigenPod pod = _eigenPodManager.getPod(podOwner);
+        uint256 len = valPubKeys.length;
+        for (uint256 i = 0; i < len; ++i) {
+            require(pod.validatorPubkeyToInfo(valPubKeys[i]).status == IEigenPod.VALIDATOR_STATUS.ACTIVE,
+                "validator not active");
+            _registerValidator(valPubKeys[i], podOwner);
+        }
+    }
+
+    /// @dev Internal function to register a validator.
+    function _registerValidator(bytes calldata valPubKey, address podOwner) internal {
+        validatorRegistrations[valPubKey] = ValidatorRegistrationInfo({
+            exists: true,
+            podOwner: podOwner,
+            freezeHeight: EventHeightLib.EventHeight({
+                exists: false,
+                blockHeight: 0
+            }),
+            deregRequestHeight: EventHeightLib.EventHeight({
+                exists: false,
+                blockHeight: 0
+            })
+        });
+        emit ValidatorRegistered(valPubKey, podOwner);
+    }
+
+    /// @dev Internal function to request deregistration of a validator.
+    function _requestValidatorDeregistration(bytes calldata valPubKey) internal {
+        require(!validatorRegistrations[valPubKey].deregRequestHeight.exists,
+            "dereg already requested");
+        EventHeightLib.set(validatorRegistrations[valPubKey].deregRequestHeight, block.number);
+        emit ValidatorDeregistrationRequested(valPubKey, validatorRegistrations[valPubKey].podOwner);
+    }
+
+    /// @dev Internal function to deregister a validator.
+    function _deregisterValidator(bytes calldata valPubKey) internal {
+        require(!validatorRegistrations[valPubKey].freezeHeight.exists, "frozen val cant deregister");
+        require(validatorRegistrations[valPubKey].deregRequestHeight.exists,
+            "dereg not requested");
+        require(block.number > validatorRegistrations[valPubKey].deregRequestHeight.blockHeight + validatorDeregPeriodBlocks,
+            "dereg too soon");
+        address podOwner = validatorRegistrations[valPubKey].podOwner;
+        delete validatorRegistrations[valPubKey];
+        emit ValidatorDeregistered(valPubKey, podOwner);
+    }
+
+    /// @dev Internal function to register an LST restaker.
+    function _registerLSTRestaker(bytes[] calldata chosenValidators) internal {
+        require(chosenValidators.length != 0, "need chosen vals");
+        uint256 stratLen = _strategyManager.stakerStrategyListLength(msg.sender);
+        require(stratLen != 0, "no eigen strategy deposits");
+        lstRestakerRegistrations[msg.sender] = LSTRestakerRegistrationInfo({
+            exists: true,
+            chosenValidators: chosenValidators,
+            numChosen: chosenValidators.length,
+            deregRequestHeight: EventHeightLib.EventHeight({
+                exists: false,
+                blockHeight: 0
+            })
+        });
+        uint256 len = chosenValidators.length;
+        for (uint256 i = 0; i < len; ++i) {
+            emit LSTRestakerRegistered(chosenValidators[i], chosenValidators.length, msg.sender);
+        }
+    }
+
+    /// @dev Internal function to request deregistration of an LST restaker.
+    function _requestLSTRestakerDeregistration() internal {
+        LSTRestakerRegistrationInfo storage reg = lstRestakerRegistrations[msg.sender];
+        require(!reg.deregRequestHeight.exists, "dereg already requested");
+        EventHeightLib.set(reg.deregRequestHeight, block.number);
+        for (uint256 i = 0; i < reg.numChosen; ++i) {
+            emit LSTRestakerDeregistrationRequested(reg.chosenValidators[i], reg.numChosen, msg.sender);
+        }
+    }
+
+    /// @dev Internal function to deregister an LST restaker.
+    function _deregisterLSTRestaker() internal {
+        LSTRestakerRegistrationInfo storage reg = lstRestakerRegistrations[msg.sender];
+        require(reg.deregRequestHeight.exists, "dereg not requested");
+        require(block.number > reg.deregRequestHeight.blockHeight + lstRestakerDeregPeriodBlocks,
+            "dereg too soon");
+        for (uint256 i = 0; i < reg.numChosen; ++i) {
+            emit LSTRestakerDeregistered(reg.chosenValidators[i], reg.numChosen, msg.sender);
+        }
+        delete lstRestakerRegistrations[msg.sender];
+    }
+
+    /// @dev Internal function to freeze a validator.
+    function _freeze(bytes calldata valPubKey) internal {
+        require(!validatorRegistrations[valPubKey].freezeHeight.exists, "val already frozen");
+        EventHeightLib.set(validatorRegistrations[valPubKey].freezeHeight, block.number);
+        emit ValidatorFrozen(valPubKey, validatorRegistrations[valPubKey].podOwner);
+    }
+
+    /// @dev Internal function to unfreeze a validator.
+    function _unfreeze(bytes calldata valPubKey) internal {
+        require(block.number > validatorRegistrations[valPubKey].freezeHeight.blockHeight + unfreezePeriodBlocks,
+            "unfreeze too soon");
+        EventHeightLib.del(validatorRegistrations[valPubKey].freezeHeight);
+        emit ValidatorUnfrozen(valPubKey, validatorRegistrations[valPubKey].podOwner);
+    }
+
+    /// @dev Internal function to set the AVS directory.
+    function _setAVSDirectory(IAVSDirectory avsDirectory_) internal {
+        _eigenAVSDirectory = avsDirectory_;
+        emit AVSDirectorySet(address(_eigenAVSDirectory));
+    }
+
+    /// @dev Internal function to set the strategy manager.
+    function _setStrategyManager(IStrategyManager strategyManager_) internal {
+        _strategyManager = strategyManager_;
+        emit StrategyManagerSet(address(strategyManager_));
+    }
+
+    /// @dev Internal function to set the delegation manager.
+    function _setDelegationManager(IDelegationManager delegationManager_) internal {
+        _delegationManager = delegationManager_;
+        emit DelegationManagerSet(address(delegationManager_));
+    }
+
+    /// @dev Internal function to set the EigenPod manager.
+    function _setEigenPodManager(IEigenPodManager eigenPodManager_) internal {
+        _eigenPodManager = eigenPodManager_;
+        emit EigenPodManagerSet(address(eigenPodManager_));
+    }
+
+    /// @dev Internal function to set the restakeable strategies.
+    function _setRestakeableStrategies(address[] calldata restakeableStrategies_) internal {
+        restakeableStrategies = restakeableStrategies_;
+        emit RestakeableStrategiesSet(restakeableStrategies);
+    }
+
+    /// @dev Internal function to set the freeze oracle account.
+    function _setFreezeOracle(address freezeOracle_) internal {
+        freezeOracle = freezeOracle_;
+        emit FreezeOracleSet(freezeOracle_);
+    }
+
+    /// @dev Internal function to set the unfreeze fee.
+    function _setUnfreezeFee(uint256 unfreezeFee_) internal {
+        unfreezeFee = unfreezeFee_;
+        emit UnfreezeFeeSet(unfreezeFee_);
+    }
+
+    /// @dev Internal function to set the unfreeze receiver.
+    function _setUnfreezeReceiver(address unfreezeReceiver_) internal {
+        unfreezeReceiver = unfreezeReceiver_;
+        emit UnfreezeReceiverSet(unfreezeReceiver_);
+    }
+
+    /// @dev Internal function to set the unfreeze period in blocks.
+    function _setUnfreezePeriodBlocks(uint256 unfreezePeriodBlocks_) internal {
+        unfreezePeriodBlocks = unfreezePeriodBlocks_;
+        emit UnfreezePeriodBlocksSet(unfreezePeriodBlocks_);
+    }
+    
+    /// @dev Internal function to set the operator deregistration period in blocks.
+    function _setOperatorDeregPeriodBlocks(uint256 operatorDeregPeriodBlocks_) internal {
+        operatorDeregPeriodBlocks = operatorDeregPeriodBlocks_;
+        emit OperatorDeregPeriodBlocksSet(operatorDeregPeriodBlocks_);
+    }
+
+    /// @dev Internal function to set the validator deregistration period in blocks.
+    function _setValidatorDeregPeriodBlocks(uint256 validatorDeregPeriodBlocks_) internal {
+        validatorDeregPeriodBlocks = validatorDeregPeriodBlocks_;
+        emit ValidatorDeregPeriodBlocksSet(validatorDeregPeriodBlocks_);
+    }
+
+    /// @dev Internal function to set the LST restaker deregistration period in blocks.
+    function _setLstRestakerDeregPeriodBlocks(uint256 lstRestakerDeregPeriodBlocks_) internal {
+        lstRestakerDeregPeriodBlocks = lstRestakerDeregPeriodBlocks_;
+        emit LSTRestakerDeregPeriodBlocksSet(lstRestakerDeregPeriodBlocks_);
+    }
+
+    /// @dev Internal function to update the eigenlayer metadata URI.
+    function _updateMetadataURI(string memory metadataURI_) internal {
+        _eigenAVSDirectory.updateAVSMetadataURI(metadataURI_);
+    }
+
+    /// @dev Internal function to check if a validator is opted-in.
+    function _isValidatorOptedIn(bytes calldata valPubKey) internal view returns (bool) {
+        IMevCommitAVSV3.ValidatorRegistrationInfo memory valRegistration = validatorRegistrations[valPubKey];
+        bool isValRegistered = valRegistration.exists;
+        if (!isValRegistered) {
+            return false;
+        }
+        bool isFrozen = valRegistration.freezeHeight.exists;
+        if (isFrozen) {
+            return false;
+        }
+        bool isValDeregRequested = valRegistration.deregRequestHeight.exists;
+        if (isValDeregRequested) {
+            return false;
+        }
+        bool hasPod = _eigenPodManager.hasPod(valRegistration.podOwner);
+        if (!hasPod) {
+            return false;
+        }
+        IEigenPod pod = _eigenPodManager.getPod(valRegistration.podOwner);
+        bool isValActive = pod.validatorPubkeyToInfo(valPubKey).status == IEigenPod.VALIDATOR_STATUS.ACTIVE;
+        if (!isValActive) {
+            return false;
+        }
+        address delegatedOperator = _delegationManager.delegatedTo(valRegistration.podOwner);
+        IMevCommitAVSV3.OperatorRegistrationInfo memory operatorRegistration = operatorRegistrations[delegatedOperator];
+        bool isOperatorRegistered = operatorRegistration.exists;
+        if (!isOperatorRegistered) {
+            return false;
+        }
+        bool isOperatorDeregRequested = operatorRegistration.deregRequestHeight.exists;
+        if (isOperatorDeregRequested) {
+            return false;
+        }
+        return true;
+    }
+
+    /// @dev Internal function to get the list of restakeable strategies.
+    function _getRestakeableStrategies() internal view returns (address[] memory) {
+        return restakeableStrategies;
+    }
+}
diff --git a/contracts/scripts/validator-registry/avs/UpgradeAVSV2ToV3.s.sol b/contracts/scripts/validator-registry/avs/UpgradeAVSV2ToV3.s.sol
new file mode 100644
index 000000000..1e591e761
--- /dev/null
+++ b/contracts/scripts/validator-registry/avs/UpgradeAVSV2ToV3.s.sol
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: BSL 1.1
+
+// solhint-disable no-console
+// solhint-disable one-contract-per-file
+
+pragma solidity 0.8.20;
+
+import {Script} from "forge-std/Script.sol";
+import {console} from "forge-std/console.sol";
+import {MevCommitAVSV2} from "../../../contracts/validator-registry/avs/MevCommitAVSV2.sol";
+import {MevCommitAVSV3} from "../../../contracts/validator-registry/avs/MevCommitAVSV3.sol";
+import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol";
+
+contract UpgradeAVS is Script {
+    function _runTests(MevCommitAVSV2 avs) internal {
+        bytes memory iowarsKey1 = hex"b61a6e5f09217278efc7ddad4dc4b0553b2c076d4a5fef6509c233a6531c99146347193467e84eb5ca921af1b8254b3f";
+        bytes memory iowarsKey2 = hex"aca4b5c5daf5b39514b8aa6e5f303d29f6f1bd891e5f6b6b2ae6e2ae5d95dee31cd78630c1115b6e90f3da1a66cf8edb";
+        
+        bool optedIn1;
+        bool optedIn2;
+        try avs.isValidatorOptedIn(iowarsKey1) returns (bool result) {
+            optedIn1 = result;
+            console.log("isValidatorOptedIn:", optedIn1);
+        } catch {
+            console.log("isValidatorOptedIn reverted (expected for pre-upgrade)");
+        }
+        try avs.isValidatorOptedIn(iowarsKey2) returns (bool result) {
+            optedIn2 = result;
+            console.log("isValidatorOptedIn:", optedIn2);
+        } catch {
+            console.log("isValidatorOptedIn reverted (expected for pre-upgrade)");
+        }
+
+        address owner = avs.owner();
+        console.log("owner:", owner);
+        uint256 valDeregPeriodBlocks = avs.validatorDeregPeriodBlocks();
+        console.log("validatorDeregPeriodBlocks:", valDeregPeriodBlocks);
+    }
+}
+
+contract UpgradeHolesky is UpgradeAVS {
+    function run() external {
+        require(block.chainid == 17000, "must deploy on Holesky");
+        MevCommitAVSV2 existingMevCommitAVSProxy = MevCommitAVSV2(payable(0xEDEDB8ed37A43Fd399108A44646B85b780D85DD4));
+
+        console.log("Pre-upgrade tests:");
+        _runTests(existingMevCommitAVSProxy);
+
+        vm.startBroadcast();
+        Upgrades.upgradeProxy(
+            address(existingMevCommitAVSProxy), 
+            "MevCommitAVSV3.sol", 
+            ""
+        );
+        console.log("Upgraded to MevCommitAVSV3");
+        vm.stopBroadcast();
+
+        console.log("Post-upgrade tests:");
+        _runTests(existingMevCommitAVSProxy);
+    }
+}
+
+contract UpgradeAnvil is UpgradeAVS {
+    function run() external {
+        require(block.chainid == 31337, "must deploy on anvil");
+        MevCommitAVSV2 existingMevCommitAVSProxy = MevCommitAVSV2(payable(0x5FC8d32690cc91D4c39d9d3abcBD16989F875707));
+
+        console.log("Pre-upgrade tests:");
+        _runTests(existingMevCommitAVSProxy);
+
+        vm.startBroadcast();
+        Upgrades.upgradeProxy(
+            address(existingMevCommitAVSProxy), 
+            "MevCommitAVSV3.sol", 
+            "" 
+        );
+        console.log("Upgraded to MevCommitAVSV3");
+        vm.stopBroadcast();
+
+        console.log("Post-upgrade tests:");
+        _runTests(existingMevCommitAVSProxy);
+    }
+}
diff --git a/contracts/test/validator-registry/avs/MevCommitAVSTest.sol b/contracts/test/validator-registry/avs/MevCommitAVSTest.sol
index e7c605a19..00f733071 100644
--- a/contracts/test/validator-registry/avs/MevCommitAVSTest.sol
+++ b/contracts/test/validator-registry/avs/MevCommitAVSTest.sol
@@ -37,14 +37,14 @@ contract MevCommitAVSTest is Test {
     event OperatorRegistered(address indexed operator);
     event OperatorDeregistrationRequested(address indexed operator);
     event OperatorDeregistered(address indexed operator);
-    event ValidatorRegistered(bytes indexed validatorPubKey, address indexed podOwner);
-    event ValidatorDeregistrationRequested(bytes indexed validatorPubKey, address indexed podOwner);
-    event ValidatorDeregistered(bytes indexed validatorPubKey, address indexed podOwner);
-    event LSTRestakerRegistered(bytes indexed chosenValidator, uint256 numChosen, address indexed lstRestaker);
-    event LSTRestakerDeregistrationRequested(bytes indexed chosenValidator, uint256 numChosen, address indexed lstRestaker);
-    event LSTRestakerDeregistered(bytes indexed chosenValidator, uint256 numChosen, address indexed lstRestaker);
-    event ValidatorFrozen(bytes indexed validatorPubKey, address indexed podOwner);
-    event ValidatorUnfrozen(bytes indexed validatorPubKey, address indexed podOwner);
+    event ValidatorRegistered(bytes validatorPubKey, address indexed podOwner);
+    event ValidatorDeregistrationRequested(bytes validatorPubKey, address indexed podOwner);
+    event ValidatorDeregistered(bytes validatorPubKey, address indexed podOwner);
+    event LSTRestakerRegistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker);
+    event LSTRestakerDeregistrationRequested(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker);
+    event LSTRestakerDeregistered(bytes chosenValidator, uint256 numChosen, address indexed lstRestaker);
+    event ValidatorFrozen(bytes validatorPubKey, address indexed podOwner);
+    event ValidatorUnfrozen(bytes validatorPubKey, address indexed podOwner);
     event AVSDirectorySet(address indexed avsDirectory);
     event StrategyManagerSet(address indexed strategyManager);
     event DelegationManagerSet(address indexed delegationManager);
@@ -98,6 +98,10 @@ contract MevCommitAVSTest is Test {
         vm.startPrank(owner);
         Upgrades.upgradeProxy(address(mevCommitAVS), "MevCommitAVSV2.sol", "");
         vm.stopPrank();
+
+        vm.startPrank(owner);
+        Upgrades.upgradeProxy(address(mevCommitAVS), "MevCommitAVSV3.sol", "");
+        vm.stopPrank();
     }
 
     function testRegisterOperator() public {