{
  "contractName": "AgentManager",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleRemoved",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgentAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addComplianceAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addFreezer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addRecoveryAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addSupplyModifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addTransferManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addWhiteListManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgentAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isComplianceAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isFreezer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isRecoveryAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isSupplyModifier",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isTransferManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isWhiteListManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgentAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeComplianceAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeFreezer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeRecoveryAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeSupplyModifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeTransferManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeWhiteListManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callForcedTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_fromList",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "_toList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callBatchForcedTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callPause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callUnpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_toList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callBatchMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callBatchBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_freeze",
          "type": "bool"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callSetAddressFrozen",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "_freeze",
          "type": "bool[]"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callBatchSetAddressFrozen",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callFreezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callBatchFreezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callUnfreezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callBatchUnfreezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_lostWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_onchainID",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_managerOnchainID",
          "type": "address"
        }
      ],
      "name": "callRecoveryAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_country",
          "type": "uint16"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_managerOnchainID",
          "type": "address"
        }
      ],
      "name": "callRegisterIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_identity",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callUpdateIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_country",
          "type": "uint16"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callUpdateCountry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "callDeleteIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addComplianceAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addFreezer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addRecoveryAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addSupplyModifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addTransferManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addWhiteListManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callBatchBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_fromList\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_toList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callBatchForcedTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callBatchFreezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_toList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callBatchMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_freeze\",\"type\":\"bool[]\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callBatchSetAddressFrozen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callBatchUnfreezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callDeleteIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callForcedTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callFreezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lostWallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newWallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onchainID\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_managerOnchainID\",\"type\":\"address\"}],\"name\":\"callRecoveryAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_country\",\"type\":\"uint16\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_managerOnchainID\",\"type\":\"address\"}],\"name\":\"callRegisterIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_freeze\",\"type\":\"bool\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callSetAddressFrozen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callUnfreezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callUnpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_country\",\"type\":\"uint16\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callUpdateCountry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_identity\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"callUpdateIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isAgentAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isComplianceAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isFreezer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isRecoveryAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isSupplyModifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isTransferManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isWhiteListManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeComplianceAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeFreezer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeRecoveryAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeSupplyModifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeTransferManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeWhiteListManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"callBatchBurn(address[],uint256[],address)\":{\"details\":\"calls the `batchBurn` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchBurn}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callBatchForcedTransfer(address[],address[],uint256[],address)\":{\"details\":\"calls the `batchForcedTransfer` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchForcedTransfer}.  Requires that `_onchainID` is set as TransferManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callBatchFreezePartialTokens(address[],uint256[],address)\":{\"details\":\"calls the `batchFreezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchFreezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callBatchMint(address[],uint256[],address)\":{\"details\":\"calls the `batchMint` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchMint}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callBatchSetAddressFrozen(address[],bool[],address)\":{\"details\":\"calls the `batchSetAddressFrozen` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchSetAddressFrozen}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callBatchUnfreezePartialTokens(address[],uint256[],address)\":{\"details\":\"calls the `batchUnfreezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchUnfreezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callBurn(address,uint256,address)\":{\"details\":\"calls the `burn` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-burn}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callDeleteIdentity(address,address)\":{\"details\":\"calls the `deleteIdentity` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-deleteIdentity}.  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callForcedTransfer(address,address,uint256,address)\":{\"details\":\"calls the `forcedTransfer` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-forcedTransfer}.  Requires that `_onchainID` is set as TransferManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callFreezePartialTokens(address,uint256,address)\":{\"details\":\"calls the `freezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-freezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callMint(address,uint256,address)\":{\"details\":\"calls the `mint` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-mint}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callPause(address)\":{\"details\":\"calls the `pause` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-pause}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callRecoveryAddress(address,address,address,address)\":{\"details\":\"calls the `recoveryAddress` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-recoveryAddress}.  Requires that `_managerOnchainID` is set as RecoveryAgent on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`\",\"params\":{\"_managerOnchainID\":\"the onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callRegisterIdentity(address,address,uint16,address)\":{\"details\":\"calls the `registerIdentity` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-registerIdentity}.  Requires that `ManagerOnchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`\",\"params\":{\"_managerOnchainID\":\"the onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callSetAddressFrozen(address,bool,address)\":{\"details\":\"calls the `setAddressFrozen` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-setAddressFrozen}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callUnfreezePartialTokens(address,uint256,address)\":{\"details\":\"calls the `unfreezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-unfreezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callUnpause(address)\":{\"details\":\"calls the `unpause` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-unpause}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callUpdateCountry(address,uint16,address)\":{\"details\":\"calls the `updateCountry` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-updateCountry}.  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"callUpdateIdentity(address,address,address)\":{\"details\":\"calls the `updateIdentity` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-updateIdentity}.  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\",\"params\":{\"_onchainID\":\"the _onchainID contract of the caller, e.g. \\\"i call this function and i am Bob\\\"\"}},\"isAgentAdmin(address)\":{\"details\":\"AgentAdmin Role _agentAdmin\"},\"isComplianceAgent(address)\":{\"details\":\"ComplianceAgent Role _complianceAgents\"},\"isFreezer(address)\":{\"details\":\"Freezer Role _freezers\"},\"isRecoveryAgent(address)\":{\"details\":\"RecoveryAgent Role _recoveryAgents\"},\"isSupplyModifier(address)\":{\"details\":\"SupplyModifier Role _supplyModifiers\"},\"isTransferManager(address)\":{\"details\":\"TransferManager Role _transferManagers\"},\"isWhiteListManager(address)\":{\"details\":\"WhiteListManager Role _whiteListManagers\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"token\":{\"details\":\"the token managed by this AgentManager contract\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/roles/AgentManager.sol\":\"AgentManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@onchain-id/solidity/contracts/interface/IClaimIssuer.sol\":{\"keccak256\":\"0xd0493be7cb7342962b46f8e2afdca4614ea0fe34a7f493b2da9db7d361a9042c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://105232aae24e3d0fcb4c80c00793b61b6019f6127c0ec6f9e3082ae01b2e778b\",\"dweb:/ipfs/QmV5C1wbq7H5H6DiakafSX5agAAP6rQSZ5qq7Qgq6VLkXo\"]},\"@onchain-id/solidity/contracts/interface/IERC734.sol\":{\"keccak256\":\"0x3302de9e9fe7a548cb7395b6fda38f952f6a6d1c599dfeee181a1ef80741fc1d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://fc9f00e5b2f1523fecf52b1a833e9263a53edbebb7d1458f9004cfd41dd0402e\",\"dweb:/ipfs/QmWcNcVQrg66KeQz39jPgJun7jF3CbdJKHQa19q97n5Hzb\"]},\"@onchain-id/solidity/contracts/interface/IERC735.sol\":{\"keccak256\":\"0x3b77ce6012a96cf0075197cdeb1b98b66ca1722ef23241e40ba6185f03bf4584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://766e139f0c3cc0c6489561e75df0d8eab8c277f90009e4fa19add4f22bb40d82\",\"dweb:/ipfs/QmcbAReZn9nLcnYn9AHiDmcYJ42JqAU5QSy4dKhUcJUnjy\"]},\"@onchain-id/solidity/contracts/interface/IIdentity.sol\":{\"keccak256\":\"0xdcefbe2a850f9f43e959b9f7ed93fd5b35f29ff3dfbfaac7530af737c9eba7c6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2e887c7cc67fdb2710c48bed22dbb27880f6dfb84ee93178ad4fcd659099cb96\",\"dweb:/ipfs/QmUuDEsZJC7uQQEErmuNJzePsNgHiTDdS2TuMzG1GRqrC3\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/compliance/ICompliance.sol\":{\"keccak256\":\"0x4049905b34eab118c0c3f644450299a5ed8022bbbdb26036e7c2854dae8ae1ba\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f8144953d88f543b2f537514f1136b8adf705837ba6d420b95569f6895153edb\",\"dweb:/ipfs/QmRqM7A6XrofFR67k8RtNNEkriAbKsQHDgUYaKZTMr9Nm5\"]},\"project:/contracts/registry/IClaimTopicsRegistry.sol\":{\"keccak256\":\"0x95f8fa17a716771125b203f00890eceb20ac3807f7a39a25b644427b1ff81d61\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://460dceb9e88957d5ce002b80748767c80a7e146c9b38b055a3c1ca04586b2009\",\"dweb:/ipfs/QmVdqEpGMRzSpLKBCtPzaPGatBgUyNm3NS5rQnkkYMnc1C\"]},\"project:/contracts/registry/IIdentityRegistry.sol\":{\"keccak256\":\"0x16a31f2d35143f99cc6b83d0cf6e9da9543c2b8561712079098f3a39d12ae32a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7669a9272b1df8e27e0fc3f5f64977b2b16615e585b673383db1eb157a62bf7c\",\"dweb:/ipfs/QmQzXmoFcFyBPehPyiUzGjaKfXJHLEPZMtFTBTgjuCavah\"]},\"project:/contracts/registry/IIdentityRegistryStorage.sol\":{\"keccak256\":\"0x8cd4de1e77c5da8ca2ff732069bc184aef86bcb94f95a5229e5bd6336abbd06d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f88894a3d046940be03a12cc2da3b3fb6efb51e0461fbea060a9a3190cadcf16\",\"dweb:/ipfs/QmNndZUPdpc83A9LungeAsrcencq3CzTum1tkU6KVdSRNC\"]},\"project:/contracts/registry/ITrustedIssuersRegistry.sol\":{\"keccak256\":\"0x01af20f2f537db3122c60b7c6e60e5036e07c673ef9762428b42129f65fcbc60\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://28f514b876c975777fe84bdb9f96ec5c687e4e4ff5d2b14961ba61affc57d46c\",\"dweb:/ipfs/QmdbVRsg1Q71PVHYxy1r7e5MeiMN5hHHDD8vRnXBSr8JiV\"]},\"project:/contracts/roles/AgentManager.sol\":{\"keccak256\":\"0xfa9d59daf977e572cd727dcd57a1cd5c9ad7a3b95ea6ffb5ebd4896500fc9148\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://077878f3e7e61697a36d3c65d2c20acba8c7e4f3afe7a095b888eb492416ed0e\",\"dweb:/ipfs/Qmdyp58VAaV5LryySTLiDKdKvUTx18TkxkeMK6DN84MmLd\"]},\"project:/contracts/roles/AgentRoles.sol\":{\"keccak256\":\"0xe5187df1eee9821f4f9ad30e56aecc2494aafc7a069849a902dc29e1fbf413e1\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3a26bbfcc957dd175014653a6bf4749d5721605f10673632aefabc885305a747\",\"dweb:/ipfs/QmToEGZUvbgPqVi3iJfySjNJcBkUU5AsdTifgUmEXUspEb\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]},\"project:/contracts/token/IToken.sol\":{\"keccak256\":\"0x34ce3cabab2f6b66aeb4e89fe8e9952b8aa57663e7b33429963169a835fc1f25\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://cffd212e911fd0a6a402d5438e5f5da0c1637226bfcab173a7c58efba12f2655\",\"dweb:/ipfs/QmVbqFNczrUAETfAX6F9MxXKivALRvt1HBTMhrjAKWHniq\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162002f7738038062002f778339810160408190526200003491620000b5565b6200003f3362000065565b600880546001600160a01b0319166001600160a01b0392909216919091179055620000e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620000c857600080fd5b81516001600160a01b0381168114620000e057600080fd5b9392505050565b612e8080620000f76000396000f3fe608060405234801561001057600080fd5b50600436106102045760003560e01c80630102acff14610209578063042a36061461021e5780630878c4101461024657806314f2d2761461025957806315d8ca621461026c5780632001c3501461027f5780632228a6cf1461029257806324fdc360146102a55780632acd2000146102b8578063393694a7146102cb5780633966904d146102de57806339cc8d90146102f157806339ed7a40146103045780633cdf8000146103175780633dc1c1761461032a57806341e6aa5d1461033d5780634599fb7b146103505780634aff432c14610363578063526606c91461037657806365d07b2e146103895780636b8c82b51461039c5780636c65fd6a146103af578063715018a6146103c25780637489453d146103ca5780637ad78a46146103dd5780637d684ff7146103f0578063860a2bcf146104035780638da5cb5b14610416578063944528211461042b578063965e61ea1461043e57806396df6f2714610451578063a6a7d4e214610464578063aca277e114610477578063b673266a1461048a578063bd92fcfe1461049d578063bea0790a146104b0578063c6006c9a146104c3578063c8777b50146104d6578063cdf1b693146104e9578063d5451e52146104fc578063e86c64311461050f578063f1e9217314610522578063f2fde38b14610535578063fc0c546a14610548575b600080fd5b61021c6102173660046126ff565b61055b565b005b61023161022c366004612741565b61068f565b60405190151581526020015b60405180910390f35b61021c6102543660046127b0565b6106a2565b61021c610267366004612741565b6107d3565b61021c61027a366004612741565b610875565b61023161028d366004612741565b61090a565b61021c6102a036600461284a565b610917565b61021c6102b3366004612741565b610a8a565b61021c6102c6366004612741565b610bb7565b61021c6102d93660046126ff565b610c45565b61021c6102ec366004612741565b610d39565b61021c6102ff366004612741565b610dd0565b61021c6103123660046126ff565b610ee2565b61021c610325366004612741565b610fd6565b61021c6103383660046127b0565b61106c565b61021c61034b3660046126ff565b611164565b61023161035e366004612741565b611258565b61021c610371366004612741565b611265565b61021c610384366004612741565b6112fc565b61021c610397366004612741565b61138a565b61021c6103aa3660046127b0565b61141b565b6102316103bd366004612741565b611513565b61021c611520565b61021c6103d8366004612741565b611534565b6102316103eb366004612741565b6115c8565b61021c6103fe3660046127b0565b6115d5565b61021c610411366004612741565b6116cd565b61041e611762565b60405161023d9190612888565b61021c6104393660046127b0565b611771565b61021c61044c366004612741565b611869565b61021c61045f3660046128aa565b6118ff565b61021c6104723660046128da565b6119fb565b61021c610485366004612936565b611b79565b61021c61049836600461296f565b611d13565b6102316104ab366004612741565b611e4a565b61021c6104be366004612a1c565b611e57565b61021c6104d1366004612741565b612005565b61021c6104e4366004612741565b61209b565b61021c6104f7366004612741565b61212f565b61021c61050a366004612a5b565b6121c0565b61023161051d366004612741565b612331565b61021c610530366004612a8b565b61233e565b61021c610543366004612741565b612441565b60085461041e906001600160a01b031681565b6105648161068f565b80156106015750806001600160a01b031663d202158d3360405160200161058b9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016105c0929190612ad3565b602060405180830381865afa1580156105dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106019190612ae1565b6106265760405162461bcd60e51b815260040161061d90612afe565b60405180910390fd5b6008546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906106589086908690600401612b41565b600060405180830381600087803b15801561067257600080fd5b505af1158015610686573d6000803e3d6000fd5b50505050505050565b600061069c6001836124ba565b92915050565b6106ab81611513565b80156107485750806001600160a01b031663d202158d336040516020016106d29190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610707929190612ad3565b602060405180830381865afa158015610724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107489190612ae1565b6107645760405162461bcd60e51b815260040161061d90612b5a565b600854604051634710362d60e01b81526001600160a01b0390911690634710362d9061079a908890889088908890600401612c0a565b600060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b505050505050505050565b336107dc611762565b6001600160a01b031614806107f557506107f533611258565b6108115760405162461bcd60e51b815260040161061d90612c3c565b61081c60038261253d565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b60405180910390a25050565b3361087e611762565b6001600160a01b03161480610897575061089733611258565b6108b35760405162461bcd60e51b815260040161061d90612c3c565b6108be60018261253d565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b600061069c6005836124ba565b61092081611e4a565b80156109bd5750806001600160a01b031663d202158d336040516020016109479190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b815260040161097c929190612ad3565b602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190612ae1565b6109d95760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a509190612d02565b604051633b239a7f60e01b81526001600160a01b03858116600483015261ffff851660248301529190911690633b239a7f90604401610658565b610a9381611513565b8015610b305750806001600160a01b031663d202158d33604051602001610aba9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610aef929190612ad3565b602060405180830381865afa158015610b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b309190612ae1565b610b4c5760405162461bcd60e51b815260040161061d90612b5a565b600860009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b5050505050565b33610bc0611762565b6001600160a01b03161480610bd95750610bd933611258565b610bf55760405162461bcd60e51b815260040161061d90612c3c565b610c006002826125b9565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b610c4e81611513565b8015610ceb5750806001600160a01b031663d202158d33604051602001610c759190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610caa929190612ad3565b602060405180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb9190612ae1565b610d075760405162461bcd60e51b815260040161061d90612b5a565b600854604051631fe56f7d60e01b81526001600160a01b0390911690631fe56f7d906106589086908690600401612b41565b33610d42611762565b6001600160a01b03161480610d5b5750610d5b33611258565b610d775760405162461bcd60e51b815260040161061d90612c3c565b610d8260068261253d565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b610dd981611513565b8015610e765750806001600160a01b031663d202158d33604051602001610e009190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610e35929190612ad3565b602060405180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190612ae1565b610e925760405162461bcd60e51b815260040161061d90612b5a565b600860009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b610eeb81611513565b8015610f885750806001600160a01b031663d202158d33604051602001610f129190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610f47929190612ad3565b602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190612ae1565b610fa45760405162461bcd60e51b815260040161061d90612b5a565b60085460405163125c4a3360e01b81526001600160a01b039091169063125c4a33906106589086908690600401612b41565b33610fdf611762565b6001600160a01b03161480610ff85750610ff833611258565b6110145760405162461bcd60e51b815260040161061d90612c3c565b61101f60058261253d565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b6110758161068f565b80156111125750806001600160a01b031663d202158d3360405160200161109c9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016110d1929190612ad3565b602060405180830381865afa1580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111129190612ae1565b61112e5760405162461bcd60e51b815260040161061d90612afe565b600854604051636857310760e01b81526001600160a01b039091169063685731079061079a908890889088908890600401612c0a565b61116d8161068f565b801561120a5750806001600160a01b031663d202158d336040516020016111949190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016111c9929190612ad3565b602060405180830381865afa1580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190612ae1565b6112265760405162461bcd60e51b815260040161061d90612afe565b600854604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906106589086908690600401612b41565b600061069c6007836124ba565b3361126e611762565b6001600160a01b03161480611287575061128733611258565b6112a35760405162461bcd60e51b815260040161061d90612c3c565b6112ae6006826125b9565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b33611305611762565b6001600160a01b0316148061131e575061131e33611258565b61133a5760405162461bcd60e51b815260040161061d90612c3c565b61134560028261253d565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b33611393611762565b6001600160a01b031614806113ac57506113ac33611258565b6113c85760405162461bcd60e51b815260040161061d90612c3c565b6113d36007826125b9565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b61142481611513565b80156114c15750806001600160a01b031663d202158d3360405160200161144b9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611480929190612ad3565b602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190612ae1565b6114dd5760405162461bcd60e51b815260040161061d90612b5a565b600854604051631a7af37960e01b81526001600160a01b0390911690631a7af3799061079a908890889088908890600401612d1f565b600061069c6002836124ba565b61152861263b565b611532600061269a565b565b3361153d611762565b6001600160a01b03161480611556575061155633611258565b6115725760405162461bcd60e51b815260040161061d90612c3c565b61157d60048261253d565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b600061069c6004836124ba565b6115de81611513565b801561167b5750806001600160a01b031663d202158d336040516020016116059190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b815260040161163a929190612ad3565b602060405180830381865afa158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b9190612ae1565b6116975760405162461bcd60e51b815260040161061d90612b5a565b600854604051631f8fcbf560e31b81526001600160a01b039091169063fc7e5fa89061079a908890889088908890600401612c0a565b336116d6611762565b6001600160a01b031614806116ef57506116ef33611258565b61170b5760405162461bcd60e51b815260040161061d90612c3c565b6117166001826125b9565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b6000546001600160a01b031690565b61177a8161068f565b80156118175750806001600160a01b031663d202158d336040516020016117a19190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016117d6929190612ad3565b602060405180830381865afa1580156117f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118179190612ae1565b6118335760405162461bcd60e51b815260040161061d90612afe565b600854604051634a6cc67760e01b81526001600160a01b0390911690634a6cc6779061079a908890889088908890600401612c0a565b33611872611762565b6001600160a01b0316148061188b575061188b33611258565b6118a75760405162461bcd60e51b815260040161061d90612c3c565b6118b26003826125b9565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b61190881611513565b80156119a55750806001600160a01b031663d202158d3360405160200161192f9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611964929190612ad3565b602060405180830381865afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190612ae1565b6119c15760405162461bcd60e51b815260040161061d90612b5a565b60085460405163c69c09cf60e01b81526001600160a01b03858116600483015284151560248301529091169063c69c09cf90604401610658565b611a04816115c8565b8015611aa15750806001600160a01b031663d202158d33604051602001611a2b9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611a60929190612ad3565b602060405180830381865afa158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa19190612ae1565b611af85760405162461bcd60e51b815260206004820152602260248201527f526f6c653a2053656e646572206973204e4f54205265636f76657279204167656044820152611b9d60f21b606482015260840161061d565b600854604051634942ca4560e11b81526001600160a01b0386811660048301528581166024830152848116604483015290911690639285948a906064015b6020604051808303816000875af1158015611b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb09190612ae1565b611b8281611e4a565b8015611c1f5750806001600160a01b031663d202158d33604051602001611ba99190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611bde929190612ad3565b602060405180830381865afa158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190612ae1565b611c3b5760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb29190612d02565b6001600160a01b031663a8d29d1d836040518263ffffffff1660e01b8152600401611cdd9190612888565b600060405180830381600087803b158015611cf757600080fd5b505af1158015611d0b573d6000803e3d6000fd5b505050505050565b611d1c81612331565b8015611db95750806001600160a01b031663d202158d33604051602001611d439190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611d78929190612ad3565b602060405180830381865afa158015611d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db99190612ae1565b611dd55760405162461bcd60e51b815260040161061d90612d7d565b6008546040516310a91eaf60e21b81526001600160a01b03909116906342a47abc90611e0f908a908a908a908a908a908a90600401612dc1565b600060405180830381600087803b158015611e2957600080fd5b505af1158015611e3d573d6000803e3d6000fd5b5050505050505050505050565b600061069c6006836124ba565b611e6081611e4a565b8015611efd5750806001600160a01b031663d202158d33604051602001611e879190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611ebc929190612ad3565b602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd9190612ae1565b611f195760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f909190612d02565b60405163022a501f60e51b81526001600160a01b038681166004830152858116602483015261ffff85166044830152919091169063454a03e090606401600060405180830381600087803b158015611fe757600080fd5b505af1158015611ffb573d6000803e3d6000fd5b5050505050505050565b3361200e611762565b6001600160a01b03161480612027575061202733611258565b6120435760405162461bcd60e51b815260040161061d90612c3c565b61204e6005826125b9565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b336120a4611762565b6001600160a01b031614806120bd57506120bd33611258565b6120d95760405162461bcd60e51b815260040161061d90612c3c565b6120e46004826125b9565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b33612138611762565b6001600160a01b03161480612151575061215133611258565b61216d5760405162461bcd60e51b815260040161061d90612c3c565b61217860078261253d565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b6121c981611e4a565b80156122665750806001600160a01b031663d202158d336040516020016121f09190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401612225929190612ad3565b602060405180830381865afa158015612242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122669190612ae1565b6122825760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f99190612d02565b604051638e098ca160e01b81526001600160a01b03858116600483015284811660248301529190911690638e098ca190604401610658565b600061069c6003836124ba565b61234781612331565b80156123e45750806001600160a01b031663d202158d3360405160200161236e9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016123a3929190612ad3565b602060405180830381865afa1580156123c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e49190612ae1565b6124005760405162461bcd60e51b815260040161061d90612d7d565b600854604051639fc1d0e760e01b81526001600160a01b03868116600483015285811660248301526044820185905290911690639fc1d0e790606401611b36565b61244961263b565b6001600160a01b0381166124ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061d565b6124b78161269a565b50565b60006001600160a01b03821661251d5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161061d565b506001600160a01b03166000908152602091909152604090205460ff1690565b61254782826124ba565b156125945760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161061d565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6125c382826124ba565b6126195760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161061d565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b33612644611762565b6001600160a01b0316146115325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146124b757600080fd5b60008060006060848603121561271457600080fd5b833561271f816126ea565b9250602084013591506040840135612736816126ea565b809150509250925092565b60006020828403121561275357600080fd5b813561275e816126ea565b9392505050565b60008083601f84011261277757600080fd5b5081356001600160401b0381111561278e57600080fd5b6020830191508360208260051b85010111156127a957600080fd5b9250929050565b6000806000806000606086880312156127c857600080fd5b85356001600160401b03808211156127df57600080fd5b6127eb89838a01612765565b9097509550602088013591508082111561280457600080fd5b5061281188828901612765565b9094509250506040860135612825816126ea565b809150509295509295909350565b803561ffff8116811461284557600080fd5b919050565b60008060006060848603121561285f57600080fd5b833561286a816126ea565b925061287860208501612833565b91506040840135612736816126ea565b6001600160a01b0391909116815260200190565b80151581146124b757600080fd5b6000806000606084860312156128bf57600080fd5b83356128ca816126ea565b925060208401356128788161289c565b600080600080608085870312156128f057600080fd5b84356128fb816126ea565b9350602085013561290b816126ea565b9250604085013561291b816126ea565b9150606085013561292b816126ea565b939692955090935050565b6000806040838503121561294957600080fd5b8235612954816126ea565b91506020830135612964816126ea565b809150509250929050565b60008060008060008060006080888a03121561298a57600080fd5b87356001600160401b03808211156129a157600080fd5b6129ad8b838c01612765565b909950975060208a01359150808211156129c657600080fd5b6129d28b838c01612765565b909750955060408a01359150808211156129eb57600080fd5b506129f88a828b01612765565b9094509250506060880135612a0c816126ea565b8091505092959891949750929550565b60008060008060808587031215612a3257600080fd5b8435612a3d816126ea565b93506020850135612a4d816126ea565b925061291b60408601612833565b600080600060608486031215612a7057600080fd5b8335612a7b816126ea565b92506020840135612878816126ea565b60008060008060808587031215612aa157600080fd5b8435612aac816126ea565b93506020850135612abc816126ea565b925060408501359150606085013561292b816126ea565b918252602082015260400190565b600060208284031215612af357600080fd5b815161275e8161289c565b60208082526023908201527f526f6c653a2053656e646572206973204e4f5420537570706c79204d6f64696660408201526234b2b960e91b606082015260800190565b6001600160a01b03929092168252602082015260400190565b6020808252601b908201527a2937b6329d1029b2b73232b91034b9902727aa10233932b2bd32b960291b604082015260600190565b8183526000602080850194508260005b85811015612bcd578135612bb2816126ea565b6001600160a01b031687529582019590820190600101612b9f565b509495945050505050565b81835260006001600160fb1b03831115612bf157600080fd5b8260051b80836020870137939093016020019392505050565b604081526000612c1e604083018688612b8f565b8281036020840152612c31818587612bd8565b979650505050505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015612c9c57858101830151858201604001528201612c80565b506000604082860101526040601f19601f8301168501019250505092915050565b60208082526025908201527f526f6c653a2053656e646572206973204e4f542057686974654c697374204d616040820152643730b3b2b960d91b606082015260800190565b600060208284031215612d1457600080fd5b815161275e816126ea565b604081526000612d33604083018688612b8f565b8281036020848101919091528482528591810160005b86811015612d70578335612d5c8161289c565b151582529282019290820190600101612d49565b5098975050505050505050565b60208082526024908201527f526f6c653a2053656e646572206973204e4f54205472616e73666572204d616e60408201526330b3b2b960e11b606082015260800190565b606081526000612dd560608301888a612b8f565b8281036020840152612de8818789612b8f565b90508281036040840152612dfd818587612bd8565b999850505050505050505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a2646970667358221220a717406f6718bbf6eb301b9e52cbb8292dc38f7b27675e2604014aed690b2a3c64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102045760003560e01c80630102acff14610209578063042a36061461021e5780630878c4101461024657806314f2d2761461025957806315d8ca621461026c5780632001c3501461027f5780632228a6cf1461029257806324fdc360146102a55780632acd2000146102b8578063393694a7146102cb5780633966904d146102de57806339cc8d90146102f157806339ed7a40146103045780633cdf8000146103175780633dc1c1761461032a57806341e6aa5d1461033d5780634599fb7b146103505780634aff432c14610363578063526606c91461037657806365d07b2e146103895780636b8c82b51461039c5780636c65fd6a146103af578063715018a6146103c25780637489453d146103ca5780637ad78a46146103dd5780637d684ff7146103f0578063860a2bcf146104035780638da5cb5b14610416578063944528211461042b578063965e61ea1461043e57806396df6f2714610451578063a6a7d4e214610464578063aca277e114610477578063b673266a1461048a578063bd92fcfe1461049d578063bea0790a146104b0578063c6006c9a146104c3578063c8777b50146104d6578063cdf1b693146104e9578063d5451e52146104fc578063e86c64311461050f578063f1e9217314610522578063f2fde38b14610535578063fc0c546a14610548575b600080fd5b61021c6102173660046126ff565b61055b565b005b61023161022c366004612741565b61068f565b60405190151581526020015b60405180910390f35b61021c6102543660046127b0565b6106a2565b61021c610267366004612741565b6107d3565b61021c61027a366004612741565b610875565b61023161028d366004612741565b61090a565b61021c6102a036600461284a565b610917565b61021c6102b3366004612741565b610a8a565b61021c6102c6366004612741565b610bb7565b61021c6102d93660046126ff565b610c45565b61021c6102ec366004612741565b610d39565b61021c6102ff366004612741565b610dd0565b61021c6103123660046126ff565b610ee2565b61021c610325366004612741565b610fd6565b61021c6103383660046127b0565b61106c565b61021c61034b3660046126ff565b611164565b61023161035e366004612741565b611258565b61021c610371366004612741565b611265565b61021c610384366004612741565b6112fc565b61021c610397366004612741565b61138a565b61021c6103aa3660046127b0565b61141b565b6102316103bd366004612741565b611513565b61021c611520565b61021c6103d8366004612741565b611534565b6102316103eb366004612741565b6115c8565b61021c6103fe3660046127b0565b6115d5565b61021c610411366004612741565b6116cd565b61041e611762565b60405161023d9190612888565b61021c6104393660046127b0565b611771565b61021c61044c366004612741565b611869565b61021c61045f3660046128aa565b6118ff565b61021c6104723660046128da565b6119fb565b61021c610485366004612936565b611b79565b61021c61049836600461296f565b611d13565b6102316104ab366004612741565b611e4a565b61021c6104be366004612a1c565b611e57565b61021c6104d1366004612741565b612005565b61021c6104e4366004612741565b61209b565b61021c6104f7366004612741565b61212f565b61021c61050a366004612a5b565b6121c0565b61023161051d366004612741565b612331565b61021c610530366004612a8b565b61233e565b61021c610543366004612741565b612441565b60085461041e906001600160a01b031681565b6105648161068f565b80156106015750806001600160a01b031663d202158d3360405160200161058b9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016105c0929190612ad3565b602060405180830381865afa1580156105dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106019190612ae1565b6106265760405162461bcd60e51b815260040161061d90612afe565b60405180910390fd5b6008546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906106589086908690600401612b41565b600060405180830381600087803b15801561067257600080fd5b505af1158015610686573d6000803e3d6000fd5b50505050505050565b600061069c6001836124ba565b92915050565b6106ab81611513565b80156107485750806001600160a01b031663d202158d336040516020016106d29190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610707929190612ad3565b602060405180830381865afa158015610724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107489190612ae1565b6107645760405162461bcd60e51b815260040161061d90612b5a565b600854604051634710362d60e01b81526001600160a01b0390911690634710362d9061079a908890889088908890600401612c0a565b600060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b505050505050505050565b336107dc611762565b6001600160a01b031614806107f557506107f533611258565b6108115760405162461bcd60e51b815260040161061d90612c3c565b61081c60038261253d565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b60405180910390a25050565b3361087e611762565b6001600160a01b03161480610897575061089733611258565b6108b35760405162461bcd60e51b815260040161061d90612c3c565b6108be60018261253d565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b600061069c6005836124ba565b61092081611e4a565b80156109bd5750806001600160a01b031663d202158d336040516020016109479190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b815260040161097c929190612ad3565b602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190612ae1565b6109d95760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a509190612d02565b604051633b239a7f60e01b81526001600160a01b03858116600483015261ffff851660248301529190911690633b239a7f90604401610658565b610a9381611513565b8015610b305750806001600160a01b031663d202158d33604051602001610aba9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610aef929190612ad3565b602060405180830381865afa158015610b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b309190612ae1565b610b4c5760405162461bcd60e51b815260040161061d90612b5a565b600860009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b5050505050565b33610bc0611762565b6001600160a01b03161480610bd95750610bd933611258565b610bf55760405162461bcd60e51b815260040161061d90612c3c565b610c006002826125b9565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b610c4e81611513565b8015610ceb5750806001600160a01b031663d202158d33604051602001610c759190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610caa929190612ad3565b602060405180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb9190612ae1565b610d075760405162461bcd60e51b815260040161061d90612b5a565b600854604051631fe56f7d60e01b81526001600160a01b0390911690631fe56f7d906106589086908690600401612b41565b33610d42611762565b6001600160a01b03161480610d5b5750610d5b33611258565b610d775760405162461bcd60e51b815260040161061d90612c3c565b610d8260068261253d565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b610dd981611513565b8015610e765750806001600160a01b031663d202158d33604051602001610e009190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610e35929190612ad3565b602060405180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190612ae1565b610e925760405162461bcd60e51b815260040161061d90612b5a565b600860009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b610eeb81611513565b8015610f885750806001600160a01b031663d202158d33604051602001610f129190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401610f47929190612ad3565b602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190612ae1565b610fa45760405162461bcd60e51b815260040161061d90612b5a565b60085460405163125c4a3360e01b81526001600160a01b039091169063125c4a33906106589086908690600401612b41565b33610fdf611762565b6001600160a01b03161480610ff85750610ff833611258565b6110145760405162461bcd60e51b815260040161061d90612c3c565b61101f60058261253d565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b6110758161068f565b80156111125750806001600160a01b031663d202158d3360405160200161109c9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016110d1929190612ad3565b602060405180830381865afa1580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111129190612ae1565b61112e5760405162461bcd60e51b815260040161061d90612afe565b600854604051636857310760e01b81526001600160a01b039091169063685731079061079a908890889088908890600401612c0a565b61116d8161068f565b801561120a5750806001600160a01b031663d202158d336040516020016111949190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016111c9929190612ad3565b602060405180830381865afa1580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190612ae1565b6112265760405162461bcd60e51b815260040161061d90612afe565b600854604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906106589086908690600401612b41565b600061069c6007836124ba565b3361126e611762565b6001600160a01b03161480611287575061128733611258565b6112a35760405162461bcd60e51b815260040161061d90612c3c565b6112ae6006826125b9565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b33611305611762565b6001600160a01b0316148061131e575061131e33611258565b61133a5760405162461bcd60e51b815260040161061d90612c3c565b61134560028261253d565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b33611393611762565b6001600160a01b031614806113ac57506113ac33611258565b6113c85760405162461bcd60e51b815260040161061d90612c3c565b6113d36007826125b9565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b61142481611513565b80156114c15750806001600160a01b031663d202158d3360405160200161144b9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611480929190612ad3565b602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190612ae1565b6114dd5760405162461bcd60e51b815260040161061d90612b5a565b600854604051631a7af37960e01b81526001600160a01b0390911690631a7af3799061079a908890889088908890600401612d1f565b600061069c6002836124ba565b61152861263b565b611532600061269a565b565b3361153d611762565b6001600160a01b03161480611556575061155633611258565b6115725760405162461bcd60e51b815260040161061d90612c3c565b61157d60048261253d565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b600061069c6004836124ba565b6115de81611513565b801561167b5750806001600160a01b031663d202158d336040516020016116059190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b815260040161163a929190612ad3565b602060405180830381865afa158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b9190612ae1565b6116975760405162461bcd60e51b815260040161061d90612b5a565b600854604051631f8fcbf560e31b81526001600160a01b039091169063fc7e5fa89061079a908890889088908890600401612c0a565b336116d6611762565b6001600160a01b031614806116ef57506116ef33611258565b61170b5760405162461bcd60e51b815260040161061d90612c3c565b6117166001826125b9565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b6000546001600160a01b031690565b61177a8161068f565b80156118175750806001600160a01b031663d202158d336040516020016117a19190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016117d6929190612ad3565b602060405180830381865afa1580156117f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118179190612ae1565b6118335760405162461bcd60e51b815260040161061d90612afe565b600854604051634a6cc67760e01b81526001600160a01b0390911690634a6cc6779061079a908890889088908890600401612c0a565b33611872611762565b6001600160a01b0316148061188b575061188b33611258565b6118a75760405162461bcd60e51b815260040161061d90612c3c565b6118b26003826125b9565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b61190881611513565b80156119a55750806001600160a01b031663d202158d3360405160200161192f9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611964929190612ad3565b602060405180830381865afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190612ae1565b6119c15760405162461bcd60e51b815260040161061d90612b5a565b60085460405163c69c09cf60e01b81526001600160a01b03858116600483015284151560248301529091169063c69c09cf90604401610658565b611a04816115c8565b8015611aa15750806001600160a01b031663d202158d33604051602001611a2b9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611a60929190612ad3565b602060405180830381865afa158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa19190612ae1565b611af85760405162461bcd60e51b815260206004820152602260248201527f526f6c653a2053656e646572206973204e4f54205265636f76657279204167656044820152611b9d60f21b606482015260840161061d565b600854604051634942ca4560e11b81526001600160a01b0386811660048301528581166024830152848116604483015290911690639285948a906064015b6020604051808303816000875af1158015611b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb09190612ae1565b611b8281611e4a565b8015611c1f5750806001600160a01b031663d202158d33604051602001611ba99190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611bde929190612ad3565b602060405180830381865afa158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190612ae1565b611c3b5760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb29190612d02565b6001600160a01b031663a8d29d1d836040518263ffffffff1660e01b8152600401611cdd9190612888565b600060405180830381600087803b158015611cf757600080fd5b505af1158015611d0b573d6000803e3d6000fd5b505050505050565b611d1c81612331565b8015611db95750806001600160a01b031663d202158d33604051602001611d439190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611d78929190612ad3565b602060405180830381865afa158015611d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db99190612ae1565b611dd55760405162461bcd60e51b815260040161061d90612d7d565b6008546040516310a91eaf60e21b81526001600160a01b03909116906342a47abc90611e0f908a908a908a908a908a908a90600401612dc1565b600060405180830381600087803b158015611e2957600080fd5b505af1158015611e3d573d6000803e3d6000fd5b5050505050505050505050565b600061069c6006836124ba565b611e6081611e4a565b8015611efd5750806001600160a01b031663d202158d33604051602001611e879190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401611ebc929190612ad3565b602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd9190612ae1565b611f195760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f909190612d02565b60405163022a501f60e51b81526001600160a01b038681166004830152858116602483015261ffff85166044830152919091169063454a03e090606401600060405180830381600087803b158015611fe757600080fd5b505af1158015611ffb573d6000803e3d6000fd5b5050505050505050565b3361200e611762565b6001600160a01b03161480612027575061202733611258565b6120435760405162461bcd60e51b815260040161061d90612c3c565b61204e6005826125b9565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b336120a4611762565b6001600160a01b031614806120bd57506120bd33611258565b6120d95760405162461bcd60e51b815260040161061d90612c3c565b6120e46004826125b9565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020612e0b83398151915290610869908490612c6f565b33612138611762565b6001600160a01b03161480612151575061215133611258565b61216d5760405162461bcd60e51b815260040161061d90612c3c565b61217860078261253d565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020612e2b83398151915290610869908490612c6f565b6121c981611e4a565b80156122665750806001600160a01b031663d202158d336040516020016121f09190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b8152600401612225929190612ad3565b602060405180830381865afa158015612242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122669190612ae1565b6122825760405162461bcd60e51b815260040161061d90612cbd565b600860009054906101000a90046001600160a01b03166001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f99190612d02565b604051638e098ca160e01b81526001600160a01b03858116600483015284811660248301529190911690638e098ca190604401610658565b600061069c6003836124ba565b61234781612331565b80156123e45750806001600160a01b031663d202158d3360405160200161236e9190612888565b6040516020818303038152906040528051906020012060026040518363ffffffff1660e01b81526004016123a3929190612ad3565b602060405180830381865afa1580156123c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e49190612ae1565b6124005760405162461bcd60e51b815260040161061d90612d7d565b600854604051639fc1d0e760e01b81526001600160a01b03868116600483015285811660248301526044820185905290911690639fc1d0e790606401611b36565b61244961263b565b6001600160a01b0381166124ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061d565b6124b78161269a565b50565b60006001600160a01b03821661251d5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161061d565b506001600160a01b03166000908152602091909152604090205460ff1690565b61254782826124ba565b156125945760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161061d565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6125c382826124ba565b6126195760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161061d565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b33612644611762565b6001600160a01b0316146115325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146124b757600080fd5b60008060006060848603121561271457600080fd5b833561271f816126ea565b9250602084013591506040840135612736816126ea565b809150509250925092565b60006020828403121561275357600080fd5b813561275e816126ea565b9392505050565b60008083601f84011261277757600080fd5b5081356001600160401b0381111561278e57600080fd5b6020830191508360208260051b85010111156127a957600080fd5b9250929050565b6000806000806000606086880312156127c857600080fd5b85356001600160401b03808211156127df57600080fd5b6127eb89838a01612765565b9097509550602088013591508082111561280457600080fd5b5061281188828901612765565b9094509250506040860135612825816126ea565b809150509295509295909350565b803561ffff8116811461284557600080fd5b919050565b60008060006060848603121561285f57600080fd5b833561286a816126ea565b925061287860208501612833565b91506040840135612736816126ea565b6001600160a01b0391909116815260200190565b80151581146124b757600080fd5b6000806000606084860312156128bf57600080fd5b83356128ca816126ea565b925060208401356128788161289c565b600080600080608085870312156128f057600080fd5b84356128fb816126ea565b9350602085013561290b816126ea565b9250604085013561291b816126ea565b9150606085013561292b816126ea565b939692955090935050565b6000806040838503121561294957600080fd5b8235612954816126ea565b91506020830135612964816126ea565b809150509250929050565b60008060008060008060006080888a03121561298a57600080fd5b87356001600160401b03808211156129a157600080fd5b6129ad8b838c01612765565b909950975060208a01359150808211156129c657600080fd5b6129d28b838c01612765565b909750955060408a01359150808211156129eb57600080fd5b506129f88a828b01612765565b9094509250506060880135612a0c816126ea565b8091505092959891949750929550565b60008060008060808587031215612a3257600080fd5b8435612a3d816126ea565b93506020850135612a4d816126ea565b925061291b60408601612833565b600080600060608486031215612a7057600080fd5b8335612a7b816126ea565b92506020840135612878816126ea565b60008060008060808587031215612aa157600080fd5b8435612aac816126ea565b93506020850135612abc816126ea565b925060408501359150606085013561292b816126ea565b918252602082015260400190565b600060208284031215612af357600080fd5b815161275e8161289c565b60208082526023908201527f526f6c653a2053656e646572206973204e4f5420537570706c79204d6f64696660408201526234b2b960e91b606082015260800190565b6001600160a01b03929092168252602082015260400190565b6020808252601b908201527a2937b6329d1029b2b73232b91034b9902727aa10233932b2bd32b960291b604082015260600190565b8183526000602080850194508260005b85811015612bcd578135612bb2816126ea565b6001600160a01b031687529582019590820190600101612b9f565b509495945050505050565b81835260006001600160fb1b03831115612bf157600080fd5b8260051b80836020870137939093016020019392505050565b604081526000612c1e604083018688612b8f565b8281036020840152612c31818587612bd8565b979650505050505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015612c9c57858101830151858201604001528201612c80565b506000604082860101526040601f19601f8301168501019250505092915050565b60208082526025908201527f526f6c653a2053656e646572206973204e4f542057686974654c697374204d616040820152643730b3b2b960d91b606082015260800190565b600060208284031215612d1457600080fd5b815161275e816126ea565b604081526000612d33604083018688612b8f565b8281036020848101919091528482528591810160005b86811015612d70578335612d5c8161289c565b151582529282019290820190600101612d49565b5098975050505050505050565b60208082526024908201527f526f6c653a2053656e646572206973204e4f54205472616e73666572204d616e60408201526330b3b2b960e11b606082015260800190565b606081526000612dd560608301888a612b8f565b8281036020840152612de8818789612b8f565b90508281036040840152612dfd818587612bd8565b999850505050505050505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a2646970667358221220a717406f6718bbf6eb301b9e52cbb8292dc38f7b27675e2604014aed690b2a3c64736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:306:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "95:209:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "141:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "150:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "153:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "143:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "143:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "143:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "116:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "125:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "112:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "112:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "137:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "108:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "108:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "105:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "166:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "185:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "179:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "179:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "170:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "258:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "267:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "270:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "260:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "260:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "260:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "217:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "228:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "243:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "248:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "239:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "239:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "252:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "235:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "235:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "224:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "224:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "214:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "214:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "207:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "207:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "204:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "283:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "293:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "283:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "61:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "72:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "84:6:54",
                "type": ""
              }
            ],
            "src": "14:290:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:20487:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:86:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "123:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "132:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "135:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "125:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "125:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "125:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "82:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "93:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "108:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "113:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "104:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "104:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "117:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "100:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "89:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "89:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "79:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "79:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "72:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "72:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "69:70:54"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:54",
                "type": ""
              }
            ],
            "src": "14:131:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "272:352:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "318:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "327:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "330:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "320:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "320:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "320:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "293:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "302:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "289:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "289:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "314:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "285:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "285:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "282:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "343:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "369:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "356:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "356:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "347:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "413:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "388:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "388:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "388:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "428:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "438:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "428:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "452:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "479:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "490:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "475:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "475:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "462:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "462:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "452:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "503:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "535:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "546:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "531:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "531:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "518:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "518:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "507:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "584:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "559:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "559:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "559:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "601:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "611:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "601:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256t_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "222:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "233:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "245:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "253:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "261:6:54",
                "type": ""
              }
            ],
            "src": "150:474:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "699:177:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "745:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "754:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "757:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "747:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "747:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "747:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "720:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "729:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "716:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "716:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "741:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "712:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "712:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "709:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "770:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "796:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "783:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "783:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "774:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "840:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "815:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "815:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "815:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "855:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "865:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "855:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "665:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "676:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "688:6:54",
                "type": ""
              }
            ],
            "src": "629:247:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "976:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "986:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "998:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1009:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "994:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "994:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "986:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1028:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "1053:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "1046:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1046:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1039:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1039:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1021:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1021:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1021:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "945:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "956:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "967:4:54",
                "type": ""
              }
            ],
            "src": "881:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1157:283:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1206:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1215:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1218:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1208:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1208:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1208:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1185:6:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1193:4:54",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1181:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1181:17:54"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "1200:3:54"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1177:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1177:27:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1170:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1170:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1167:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1231:30:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1254:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1241:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1241:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "1231:6:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1304:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1313:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1316:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1306:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1306:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1306:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1276:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1292:2:54",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1296:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "1288:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1288:10:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1300:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1284:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1284:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1273:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1273:30:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1270:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1329:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1345:6:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1353:4:54",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1341:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1341:17:54"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "1329:8:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1418:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1427:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1430:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1420:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1420:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1420:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1381:6:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1393:1:54",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1396:6:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1389:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1389:14:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1377:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1377:27:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1406:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1373:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1373:38:54"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "1413:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1370:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1370:47:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1367:67:54"
                }
              ]
            },
            "name": "abi_decode_array_address_dyn_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1120:6:54",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1128:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "1136:8:54",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1146:6:54",
                "type": ""
              }
            ],
            "src": "1073:367:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1637:734:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1683:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1692:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1695:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1685:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1685:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1685:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1658:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1667:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1654:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1654:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1679:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1650:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1650:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1647:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1708:37:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1735:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1722:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1722:23:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "1712:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1754:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1772:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1776:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "1768:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1768:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1780:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "1764:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1764:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1758:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1809:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1818:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1821:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1811:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1811:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1811:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1797:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1805:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1794:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1794:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1791:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1834:96:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1902:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1913:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1898:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1898:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1922:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "1860:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1860:70:54"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "1838:8:54",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "1848:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1939:18:54",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "1949:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1939:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1966:18:54",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "1976:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1966:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1993:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2026:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2037:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2022:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2022:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2009:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2009:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "1997:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2070:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2079:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2082:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2072:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2072:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2072:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "2056:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2066:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2053:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2053:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2050:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2095:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2163:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "2174:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2159:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2159:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "2185:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "2121:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2121:72:54"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "2099:8:54",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "2109:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2202:18:54",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "2212:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2202:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2229:18:54",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "2239:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "2229:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2256:45:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2286:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2297:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2282:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2282:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2269:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2269:32:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2260:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2335:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2310:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2310:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2310:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2350:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2360:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "2350:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1571:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1582:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1594:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1602:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1610:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "1618:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "1626:6:54",
                "type": ""
              }
            ],
            "src": "1445:926:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2424:111:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2434:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2456:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2443:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2443:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2434:5:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2513:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2522:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2525:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2515:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2515:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2515:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2485:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2496:5:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2503:6:54",
                                "type": "",
                                "value": "0xffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "2492:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2492:18:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "2482:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2482:29:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2475:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2475:37:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2472:57:54"
                }
              ]
            },
            "name": "abi_decode_uint16",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2403:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2414:5:54",
                "type": ""
              }
            ],
            "src": "2376:159:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2661:357:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2707:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2716:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2719:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2709:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2709:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2709:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2682:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2691:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2678:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2678:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2703:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2674:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2674:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2671:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2732:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2758:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2745:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2745:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2736:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2802:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2777:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2777:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2777:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2817:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2827:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2817:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2841:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2873:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2884:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2869:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2869:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint16",
                      "nodeType": "YulIdentifier",
                      "src": "2851:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2851:37:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2841:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2897:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2929:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2940:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2925:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2925:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2912:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2912:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "2901:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "2978:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2953:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2953:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2953:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2995:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "3005:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2995:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint16t_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2611:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2622:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2634:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2642:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2650:6:54",
                "type": ""
              }
            ],
            "src": "2540:478:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3111:177:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3157:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3166:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3169:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3159:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3159:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3159:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3132:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3141:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3128:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3128:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3153:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3124:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3124:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3121:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3182:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3208:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3195:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3195:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3186:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3252:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3227:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3227:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3227:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3267:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3277:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3267:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3077:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3088:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3100:6:54",
                "type": ""
              }
            ],
            "src": "3023:265:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3482:734:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3528:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3537:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3540:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3530:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3530:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3530:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3503:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3512:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3499:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3499:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3524:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3495:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3495:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3492:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3553:37:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3580:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3567:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3567:23:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "3557:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3599:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3617:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3621:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3613:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3613:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3625:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "3609:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3609:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3603:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3654:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3663:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3666:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3656:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3656:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3656:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3642:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3650:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3639:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3639:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3636:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3679:96:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3747:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3758:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3743:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3743:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "3767:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "3705:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3705:70:54"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "3683:8:54",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "3693:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3784:18:54",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "3794:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3784:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3811:18:54",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "3821:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3811:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3838:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3871:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3882:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3867:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3867:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3854:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3854:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "3842:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3915:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3924:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3927:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3917:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3917:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3917:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "3901:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3911:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3898:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3898:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3895:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3940:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4008:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "4019:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4004:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4004:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4030:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "3966:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3966:72:54"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "3944:8:54",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "3954:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4047:18:54",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "4057:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4047:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4074:18:54",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "4084:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "4074:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4101:45:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4131:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4142:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4127:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4127:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4114:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4114:32:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "4105:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4180:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "4155:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4155:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4155:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4195:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "4205:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "4195:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_bool_$dyn_calldata_ptrt_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3416:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3427:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3439:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3447:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3455:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3463:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "3471:6:54",
                "type": ""
              }
            ],
            "src": "3293:923:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4322:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4332:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4344:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4355:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4340:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4340:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4332:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4374:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4389:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4405:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4410:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4401:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4401:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4414:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "4397:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4397:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4385:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4385:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4367:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4367:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4367:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4291:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4302:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4313:4:54",
                "type": ""
              }
            ],
            "src": "4221:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4471:76:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4525:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4534:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4537:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4527:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4527:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4527:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "4494:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4515:5:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "4508:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4508:13:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "4501:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4501:21:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "4491:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4491:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4484:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4484:40:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4481:60:54"
                }
              ]
            },
            "name": "validator_revert_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4460:5:54",
                "type": ""
              }
            ],
            "src": "4429:118:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4671:422:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4717:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4726:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4729:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4719:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4719:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4719:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4692:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4701:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4688:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4688:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4713:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4684:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4684:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4681:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4742:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4768:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4755:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4755:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "4746:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4812:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "4787:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4787:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4787:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4827:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "4837:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4827:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4851:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4883:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4894:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4879:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4879:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4866:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4866:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "4855:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "4929:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "4907:21:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4907:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4907:30:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4946:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "4956:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4946:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4972:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5004:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5015:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5000:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5000:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4987:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4987:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "4976:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "5053:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5028:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5028:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5028:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5070:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "5080:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5070:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_boolt_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4621:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4632:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4644:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4652:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4660:6:54",
                "type": ""
              }
            ],
            "src": "4552:541:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5237:550:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5284:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5293:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5296:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5286:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5286:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5286:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5258:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5267:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5254:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5254:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5279:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5250:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5250:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5247:53:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5309:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5335:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5322:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5322:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "5313:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5379:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5354:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5354:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5354:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5394:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "5404:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5394:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5418:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5450:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5461:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5446:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5446:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5433:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5433:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "5422:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "5499:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5474:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5474:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5474:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5516:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "5526:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5516:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5542:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5574:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5585:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5570:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5570:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5557:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5557:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "5546:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "5623:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5598:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5598:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5598:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5640:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "5650:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5640:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5666:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5698:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5709:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5694:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5694:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5681:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5681:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_3",
                      "nodeType": "YulTypedName",
                      "src": "5670:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_3",
                        "nodeType": "YulIdentifier",
                        "src": "5747:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5722:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5722:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5722:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5764:17:54",
                  "value": {
                    "name": "value_3",
                    "nodeType": "YulIdentifier",
                    "src": "5774:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5764:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_addresst_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5179:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5190:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5202:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5210:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5218:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "5226:6:54",
                "type": ""
              }
            ],
            "src": "5098:689:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5897:301:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5943:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5952:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5955:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5945:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5945:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5945:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5918:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5927:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5914:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5914:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5939:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5910:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5910:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5907:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5968:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5994:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5981:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5981:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "5972:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "6038:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "6013:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6013:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6013:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6053:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "6063:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6053:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6077:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6109:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6120:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6105:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6105:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6092:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6092:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "6081:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "6158:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "6133:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6133:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6133:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6175:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "6185:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6175:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5855:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5866:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5878:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5886:6:54",
                "type": ""
              }
            ],
            "src": "5792:406:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6447:998:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6494:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6503:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6506:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6496:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6496:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6496:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6468:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6477:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6464:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6464:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6489:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6460:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6460:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6457:53:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6519:37:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6546:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6533:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6533:23:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6523:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6565:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6583:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6587:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "6579:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6579:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6591:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "6575:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6575:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6569:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6620:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6629:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6632:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6622:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6622:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6622:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6608:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6616:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6605:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6605:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6602:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6645:96:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6713:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6724:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6709:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6709:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6733:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "6671:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6671:70:54"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "6649:8:54",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "6659:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6750:18:54",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "6760:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6750:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6777:18:54",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "6787:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6777:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6804:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6837:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6848:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6833:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6833:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6820:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6820:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "6808:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6881:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6890:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6893:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6883:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6883:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6883:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "6867:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6877:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6864:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6864:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6861:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6906:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6974:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "6985:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6970:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6970:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6996:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "6932:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6932:72:54"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "6910:8:54",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "6920:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7013:18:54",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "7023:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "7013:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7040:18:54",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "7050:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "7040:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7067:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7100:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7111:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7096:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7096:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7083:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7083:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_2",
                      "nodeType": "YulTypedName",
                      "src": "7071:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7144:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7153:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7156:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7146:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7146:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7146:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_2",
                        "nodeType": "YulIdentifier",
                        "src": "7130:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "7140:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7127:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7127:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7124:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7169:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7237:9:54"
                          },
                          {
                            "name": "offset_2",
                            "nodeType": "YulIdentifier",
                            "src": "7248:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7233:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7233:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "7259:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "7195:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7195:72:54"
                  },
                  "variables": [
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "7173:8:54",
                      "type": ""
                    },
                    {
                      "name": "value5_1",
                      "nodeType": "YulTypedName",
                      "src": "7183:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7276:18:54",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "7286:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "7276:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7303:18:54",
                  "value": {
                    "name": "value5_1",
                    "nodeType": "YulIdentifier",
                    "src": "7313:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "7303:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7330:45:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7360:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7371:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7356:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7356:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7343:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7343:32:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "7334:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "7409:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "7384:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7384:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7384:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7424:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "7434:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "7424:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6365:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6376:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6388:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6396:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6404:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "6412:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "6420:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "6428:6:54",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "6436:6:54",
                "type": ""
              }
            ],
            "src": "6203:1242:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7606:482:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7653:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7662:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7665:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7655:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7655:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7655:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7627:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7636:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7623:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7623:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7648:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7619:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7619:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7616:53:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7678:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7704:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7691:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7691:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "7682:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "7748:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "7723:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7723:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7723:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7763:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "7773:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7763:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7787:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7819:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7830:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7815:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7815:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7802:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7802:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "7791:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "7868:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "7843:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7843:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7843:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7885:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "7895:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "7885:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7911:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7943:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7954:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7939:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7939:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint16",
                      "nodeType": "YulIdentifier",
                      "src": "7921:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7921:37:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "7911:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7967:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7999:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8010:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7995:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7995:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7982:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7982:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "7971:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "8048:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "8023:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8023:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8023:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8065:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "8075:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "8065:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_contract$_IIdentity_$1743t_uint16t_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7548:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7559:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7571:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7579:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "7587:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "7595:6:54",
                "type": ""
              }
            ],
            "src": "7450:638:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8233:425:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8279:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8288:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8291:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8281:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8281:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8281:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8254:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8263:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8250:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8250:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8275:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8246:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8246:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8243:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8304:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8330:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8317:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8317:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "8308:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "8374:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "8349:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8349:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8349:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8389:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "8399:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8389:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8413:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8445:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8456:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8441:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8441:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8428:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8428:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "8417:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "8494:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "8469:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8469:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8469:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8511:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "8521:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "8511:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8537:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8569:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8580:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8565:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8565:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8552:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8552:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "8541:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "8618:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "8593:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8593:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8593:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8635:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "8645:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "8635:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_contract$_IIdentity_$1743t_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8183:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8194:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8206:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8214:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "8222:6:54",
                "type": ""
              }
            ],
            "src": "8093:565:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8802:477:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8849:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8858:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8861:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8851:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8851:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8851:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8823:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8832:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8819:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8819:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8844:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8815:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8815:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8812:53:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8874:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8900:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8887:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8887:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "8878:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "8944:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "8919:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8919:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8919:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8959:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "8969:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8959:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8983:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9015:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9026:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9011:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9011:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8998:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8998:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "8987:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "9064:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "9039:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9039:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9039:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9081:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "9091:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "9081:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9107:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9134:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9145:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9130:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9130:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9117:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9117:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "9107:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9158:47:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9190:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9201:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9186:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9186:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9173:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9173:32:54"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "9162:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "9239:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "9214:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9214:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9214:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9256:17:54",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "9266:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "9256:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_contract$_IIdentity_$1743",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8744:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8755:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8767:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8775:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "8783:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "8791:6:54",
                "type": ""
              }
            ],
            "src": "8663:616:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9401:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9411:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9423:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9434:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9419:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9419:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9411:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9453:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "9468:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9484:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9489:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "9480:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9480:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9493:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "9476:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9476:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9464:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9464:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9446:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9446:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9446:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_IToken_$12234__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9370:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9381:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9392:4:54",
                "type": ""
              }
            ],
            "src": "9284:219:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9645:119:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9655:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9667:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9678:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9663:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9663:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9655:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9697:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "9708:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9690:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9690:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9690:25:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9735:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9746:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9731:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9731:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "9751:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9724:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9724:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9724:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_rational_2_by_1__to_t_bytes32_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9606:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9617:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9625:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9636:4:54",
                "type": ""
              }
            ],
            "src": "9508:256:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9847:167:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9893:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9902:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9905:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9895:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9895:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9895:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9868:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9877:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9864:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9864:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9889:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9860:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9860:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9857:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9918:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9937:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "9931:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9931:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "9922:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "9978:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "9956:21:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9956:28:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9956:28:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9993:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "10003:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "9993:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9813:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9824:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9836:6:54",
                "type": ""
              }
            ],
            "src": "9769:245:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10193:225:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10210:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10221:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10203:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10203:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10244:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10255:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10240:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10240:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10260:2:54",
                        "type": "",
                        "value": "35"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10233:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10233:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10233:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10283:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10294:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10279:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10279:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420537570706c79204d6f646966",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10299:34:54",
                        "type": "",
                        "value": "Role: Sender is NOT Supply Modif"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10272:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10272:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10272:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10354:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10365:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10350:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10350:18:54"
                      },
                      {
                        "hexValue": "696572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10370:5:54",
                        "type": "",
                        "value": "ier"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10343:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10343:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10343:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10385:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10397:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10408:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10393:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10393:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10385:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10170:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10184:4:54",
                "type": ""
              }
            ],
            "src": "10019:399:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10552:145:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10562:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10574:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10585:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10570:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10570:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10562:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10604:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "10619:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10635:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10640:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "10631:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10631:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10644:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "10627:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10627:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "10615:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10615:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10597:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10597:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10597:51:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10668:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10679:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10664:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10664:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "10684:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10657:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10657:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10657:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10513:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10524:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10532:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10543:4:54",
                "type": ""
              }
            ],
            "src": "10423:274:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10876:177:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10893:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10904:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10886:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10886:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10886:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10927:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10938:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10923:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10923:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10943:2:54",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10916:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10916:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10916:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10966:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10977:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10962:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10962:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10982:29:54",
                        "type": "",
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10955:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10955:57:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10955:57:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11021:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11033:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11044:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11029:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11029:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11021:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10853:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10867:4:54",
                "type": ""
              }
            ],
            "src": "10702:351:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11136:444:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11153:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11158:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11146:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11146:19:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11146:19:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11174:14:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "11184:4:54",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "11178:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11197:19:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11208:3:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "11213:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11204:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11204:12:54"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "11197:3:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11225:19:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "11239:5:54"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "11229:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11253:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "11262:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "11257:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11321:234:54",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "11335:35:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "11363:6:54"
                            }
                          ],
                          "functionName": {
                            "name": "calldataload",
                            "nodeType": "YulIdentifier",
                            "src": "11350:12:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11350:20:54"
                        },
                        "variables": [
                          {
                            "name": "value_1",
                            "nodeType": "YulTypedName",
                            "src": "11339:7:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_1",
                              "nodeType": "YulIdentifier",
                              "src": "11408:7:54"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "11383:24:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11383:33:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11383:33:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "11436:3:54"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "11445:7:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11462:3:54",
                                          "type": "",
                                          "value": "160"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11467:1:54",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "11458:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11458:11:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "11471:1:54",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nodeType": "YulIdentifier",
                                    "src": "11454:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "11454:19:54"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "11441:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11441:33:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "11429:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11429:46:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11429:46:54"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "11488:19:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "11499:3:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "11504:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "11495:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11495:12:54"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "11488:3:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "11520:25:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "11534:6:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "11542:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "11530:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11530:15:54"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "11520:6:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "11283:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11286:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "11280:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11280:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "11294:18:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11296:14:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "11305:1:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11308:1:54",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "11301:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11301:9:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "11296:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "11276:3:54",
                    "statements": []
                  },
                  "src": "11272:283:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11564:10:54",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "11571:3:54"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "11564:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_array_address_dyn_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11105:5:54",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "11112:6:54",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11120:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "11128:3:54",
                "type": ""
              }
            ],
            "src": "11058:522:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11663:233:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11680:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11685:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11673:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11673:19:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11673:19:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11736:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11745:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11748:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "11738:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11738:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11738:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11707:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11723:3:54",
                                "type": "",
                                "value": "251"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11728:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "11719:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11719:11:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11732:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "11715:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11715:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "11704:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11704:31:54"
                  },
                  "nodeType": "YulIf",
                  "src": "11701:51:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11761:30:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11781:1:54",
                        "type": "",
                        "value": "5"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11784:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "shl",
                      "nodeType": "YulIdentifier",
                      "src": "11777:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11777:14:54"
                  },
                  "variables": [
                    {
                      "name": "length_1",
                      "nodeType": "YulTypedName",
                      "src": "11765:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "11817:3:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11822:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11813:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11813:14:54"
                      },
                      {
                        "name": "start",
                        "nodeType": "YulIdentifier",
                        "src": "11829:5:54"
                      },
                      {
                        "name": "length_1",
                        "nodeType": "YulIdentifier",
                        "src": "11836:8:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "11800:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11800:45:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11800:45:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11854:36:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "11869:3:54"
                          },
                          {
                            "name": "length_1",
                            "nodeType": "YulIdentifier",
                            "src": "11874:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11865:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11865:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11885:4:54",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11861:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11861:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "11854:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_array_uint256_dyn_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "start",
                "nodeType": "YulTypedName",
                "src": "11632:5:54",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "11639:6:54",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11647:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "11655:3:54",
                "type": ""
              }
            ],
            "src": "11585:311:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12150:270:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12167:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12178:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12160:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12160:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12160:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12190:87:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12242:6:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "12250:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12262:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12273:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12258:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12258:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "12204:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12204:73:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "12194:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12297:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12308:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12293:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12293:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "12317:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12325:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12313:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12313:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12286:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12286:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12286:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12345:69:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "12391:6:54"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "12399:6:54"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "12407:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_uint256_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "12353:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12353:61:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12345:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12095:9:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "12106:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "12114:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12122:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12130:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12141:4:54",
                "type": ""
              }
            ],
            "src": "11901:519:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12599:175:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12616:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12627:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12609:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12609:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12609:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12650:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12661:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12646:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12646:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12666:2:54",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12639:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12639:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12639:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12689:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12700:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12685:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12685:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12705:27:54",
                        "type": "",
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12678:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12678:55:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12678:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12742:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12754:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12765:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12750:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12750:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12742:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12576:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12590:4:54",
                "type": ""
              }
            ],
            "src": "12425:349:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12900:427:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12910:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "12920:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "12914:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12938:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "12949:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12931:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12931:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12931:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12961:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12981:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "12975:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12975:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "12965:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13008:9:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "13019:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13004:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13004:18:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "13024:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12997:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12997:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12997:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13040:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "13049:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "13044:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "13109:90:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "13138:9:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "13149:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "13134:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "13134:17:54"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13153:2:54",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13130:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13130:26:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13172:6:54"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "13180:1:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "13168:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13168:14:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "13184:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "13164:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "13164:23:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "13158:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13158:30:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "13123:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13123:66:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13123:66:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "13070:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "13073:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "13067:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13067:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "13081:19:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "13083:15:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "13092:1:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "13095:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "13088:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13088:10:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "13083:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "13063:3:54",
                    "statements": []
                  },
                  "src": "13059:140:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "13223:9:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "13234:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "13219:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "13219:22:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13243:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13215:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13215:31:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13248:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13208:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13208:42:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13208:42:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13259:62:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13275:9:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "13294:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13302:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13290:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13290:15:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13311:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "13307:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13307:7:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "13286:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "13286:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13271:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13271:45:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13318:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13267:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13267:54:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13259:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12869:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12880:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12891:4:54",
                "type": ""
              }
            ],
            "src": "12779:548:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13506:227:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13523:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13534:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13516:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13516:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13516:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13557:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13568:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13553:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13553:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13573:2:54",
                        "type": "",
                        "value": "37"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13546:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13546:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13546:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13596:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13607:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13592:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13592:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542057686974654c697374204d61",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13612:34:54",
                        "type": "",
                        "value": "Role: Sender is NOT WhiteList Ma"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13585:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13585:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13585:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13667:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13678:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13663:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13663:18:54"
                      },
                      {
                        "hexValue": "6e61676572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13683:7:54",
                        "type": "",
                        "value": "nager"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13656:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13656:35:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13656:35:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13700:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13712:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13723:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13708:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13708:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13700:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13483:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13497:4:54",
                "type": ""
              }
            ],
            "src": "13332:401:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13845:170:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "13891:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13900:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13903:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "13893:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13893:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13893:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "13866:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13875:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13862:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13862:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13887:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "13858:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13858:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "13855:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13916:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13935:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "13929:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13929:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "13920:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "13979:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "13954:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13954:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13954:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13994:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "14004:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "13994:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_contract$_IIdentityRegistry_$6637_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13811:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "13822:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "13834:6:54",
                "type": ""
              }
            ],
            "src": "13738:277:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14147:158:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14157:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14169:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14180:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14165:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14165:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14157:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14199:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "14214:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14230:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14235:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "14226:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14226:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "14239:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "14222:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "14222:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14210:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14210:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14192:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14192:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14192:51:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14263:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14274:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14259:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14259:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "14283:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14291:6:54",
                            "type": "",
                            "value": "0xffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14279:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14279:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14252:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14252:47:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14252:47:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint16__to_t_address_t_uint16__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14108:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14119:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14127:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14138:4:54",
                "type": ""
              }
            ],
            "src": "14020:285:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14553:642:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14570:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14581:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14563:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14563:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14563:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14593:87:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14645:6:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "14653:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14665:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14676:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14661:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14661:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "14607:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14607:73:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "14597:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14689:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "14699:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "14693:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14721:9:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14732:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14717:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14717:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "14741:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14749:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "14737:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14737:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14710:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14710:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14710:50:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14769:17:54",
                  "value": {
                    "name": "tail_1",
                    "nodeType": "YulIdentifier",
                    "src": "14780:6:54"
                  },
                  "variables": [
                    {
                      "name": "pos",
                      "nodeType": "YulTypedName",
                      "src": "14773:3:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "14802:6:54"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "14810:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14795:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14795:22:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14795:22:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14826:22:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "14837:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "14845:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14833:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14833:15:54"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "14826:3:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14857:20:54",
                  "value": {
                    "name": "value2",
                    "nodeType": "YulIdentifier",
                    "src": "14871:6:54"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "14861:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14886:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "14895:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "14890:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "14954:215:54",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "14968:33:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "14994:6:54"
                            }
                          ],
                          "functionName": {
                            "name": "calldataload",
                            "nodeType": "YulIdentifier",
                            "src": "14981:12:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14981:20:54"
                        },
                        "variables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "14972:5:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value",
                              "nodeType": "YulIdentifier",
                              "src": "15036:5:54"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_bool",
                            "nodeType": "YulIdentifier",
                            "src": "15014:21:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15014:28:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15014:28:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "15062:3:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "15081:5:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "iszero",
                                    "nodeType": "YulIdentifier",
                                    "src": "15074:6:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "15074:13:54"
                                }
                              ],
                              "functionName": {
                                "name": "iszero",
                                "nodeType": "YulIdentifier",
                                "src": "15067:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "15067:21:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "15055:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15055:34:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15055:34:54"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "15102:19:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "15113:3:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "15118:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "15109:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15109:12:54"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "15102:3:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "15134:25:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "15148:6:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "15156:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "15144:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15144:15:54"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "15134:6:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "14916:1:54"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "14919:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "14913:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14913:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "14927:18:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "14929:14:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "14938:1:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "14941:1:54",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "14934:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14934:9:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "14929:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "14909:3:54",
                    "statements": []
                  },
                  "src": "14905:264:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15178:11:54",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "15186:3:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15178:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_bool_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_bool_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14498:9:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "14509:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "14517:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14525:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14533:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14544:4:54",
                "type": ""
              }
            ],
            "src": "14310:885:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15323:161:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15333:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15345:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15356:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15341:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15341:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15333:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15375:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "15390:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15406:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15411:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "15402:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15402:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "15415:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "15398:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15398:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "15386:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15386:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15368:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15368:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15368:51:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15439:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15450:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15435:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15435:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "15469:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "15462:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15462:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "15455:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15455:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15428:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15428:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15428:50:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15284:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "15295:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "15303:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15314:4:54",
                "type": ""
              }
            ],
            "src": "15200:284:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15663:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15680:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15691:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15673:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15673:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15673:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15714:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15725:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15710:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15710:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15730:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15703:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15703:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15703:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15753:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15764:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15749:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15749:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f54205265636f7665727920416765",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15769:34:54",
                        "type": "",
                        "value": "Role: Sender is NOT Recovery Age"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15742:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15742:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15742:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15824:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15835:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15820:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15820:18:54"
                      },
                      {
                        "hexValue": "6e74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15840:4:54",
                        "type": "",
                        "value": "nt"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15813:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15813:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15813:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15854:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15866:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15877:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15862:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15862:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15854:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e32366dd69ce1e711b531fd04f64c1eb5d58a6082cb5c93aceedc9d12e9fbf37__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15640:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15654:4:54",
                "type": ""
              }
            ],
            "src": "15489:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16049:227:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16059:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16071:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16082:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16067:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16067:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16059:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16094:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16112:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16117:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "16108:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16108:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16121:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "16104:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16104:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "16098:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16139:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "16154:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "16162:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16150:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16150:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16132:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16132:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16132:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16186:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16197:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16182:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16182:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "16206:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "16214:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16202:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16202:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16175:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16175:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16175:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16238:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16249:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16234:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16234:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "16258:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "16266:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16254:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16254:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16227:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16227:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16227:43:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16002:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "16013:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16021:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16029:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16040:4:54",
                "type": ""
              }
            ],
            "src": "15892:384:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16455:226:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16472:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16483:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16465:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16465:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16465:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16506:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16517:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16502:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16502:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16522:2:54",
                        "type": "",
                        "value": "36"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16495:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16495:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16495:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16545:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16556:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16541:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16541:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f54205472616e73666572204d616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16561:34:54",
                        "type": "",
                        "value": "Role: Sender is NOT Transfer Man"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16534:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16534:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16534:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16616:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16627:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16612:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16612:18:54"
                      },
                      {
                        "hexValue": "61676572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16632:6:54",
                        "type": "",
                        "value": "ager"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16605:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16605:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16605:34:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16648:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16660:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16671:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16656:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16656:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16648:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d6069cf6b7b2e84c311deb0cbb2c5986516b8eec5088796e841912ade56ef97__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16432:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16446:4:54",
                "type": ""
              }
            ],
            "src": "16281:400:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17023:413:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17040:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17051:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17033:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17033:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17033:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17063:87:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "17115:6:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "17123:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17135:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17146:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17131:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17131:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "17077:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17077:73:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "17067:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17170:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17181:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17166:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17166:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "17190:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17198:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "17186:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17186:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17159:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17159:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17159:50:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17218:75:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "17270:6:54"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "17278:6:54"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "17286:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "17232:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17232:61:54"
                  },
                  "variables": [
                    {
                      "name": "tail_2",
                      "nodeType": "YulTypedName",
                      "src": "17222:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17313:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17324:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17309:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17309:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_2",
                            "nodeType": "YulIdentifier",
                            "src": "17333:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17341:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "17329:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17329:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17302:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17302:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17302:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17361:69:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "17407:6:54"
                      },
                      {
                        "name": "value5",
                        "nodeType": "YulIdentifier",
                        "src": "17415:6:54"
                      },
                      {
                        "name": "tail_2",
                        "nodeType": "YulIdentifier",
                        "src": "17423:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_uint256_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "17369:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17369:61:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17361:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16952:9:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "16963:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "16971:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "16979:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "16987:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16995:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17003:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17014:4:54",
                "type": ""
              }
            ],
            "src": "16686:750:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17614:231:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17624:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17636:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17647:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17632:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17632:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17624:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17659:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17677:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17682:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "17673:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17673:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17686:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "17669:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17669:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "17663:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17704:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "17719:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "17727:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17715:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17715:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17697:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17697:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17697:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17751:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17762:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17747:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17747:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "17771:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "17779:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17767:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17767:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17740:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17740:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17740:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17803:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17814:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17799:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17799:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "17823:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17831:6:54",
                            "type": "",
                            "value": "0xffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17819:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17819:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17792:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17792:47:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17792:47:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_contract$_IIdentity_$1743_t_uint16__to_t_address_t_address_t_uint16__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17567:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "17578:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "17586:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17594:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17605:4:54",
                "type": ""
              }
            ],
            "src": "17441:404:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17997:175:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18007:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18019:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18030:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18015:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18015:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18007:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18042:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18060:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18065:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "18056:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18056:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18069:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "18052:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18052:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "18046:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18087:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "18102:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18110:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18098:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18098:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18080:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18080:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18080:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18134:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18145:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18130:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18130:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "18154:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18162:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18150:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18150:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18123:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18123:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18123:43:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_contract$_IIdentity_$1743__to_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17958:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "17969:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17977:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17988:4:54",
                "type": ""
              }
            ],
            "src": "17850:322:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18334:218:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18344:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18356:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18367:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18352:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18352:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18344:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18379:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18397:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18402:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "18393:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18393:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18406:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "18389:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18389:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "18383:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18424:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "18439:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18447:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18435:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18435:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18417:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18417:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18417:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18471:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18482:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18467:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18467:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "18491:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18499:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18487:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18487:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18460:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18460:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18460:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18523:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18534:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18519:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18519:18:54"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "18539:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18512:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18512:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18512:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18287:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "18298:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "18306:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18314:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18325:4:54",
                "type": ""
              }
            ],
            "src": "18177:375:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18731:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18748:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18759:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18741:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18741:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18741:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18782:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18793:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18778:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18778:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18798:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18771:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18771:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18771:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18821:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18832:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18817:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18817:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18837:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18810:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18810:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18810:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18892:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18903:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18888:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18888:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18908:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18881:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18881:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18881:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18926:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18938:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18949:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18934:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18934:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18926:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18708:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18722:4:54",
                "type": ""
              }
            ],
            "src": "18557:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19138:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19155:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19166:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19148:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19148:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19148:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19189:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19200:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19185:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19185:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19205:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19178:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19178:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19178:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19228:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19239:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19224:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19224:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19244:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19217:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19217:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19217:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19299:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19310:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19295:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19295:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19315:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19288:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19288:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19288:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19329:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19341:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19352:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19337:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19337:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19329:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19115:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19129:4:54",
                "type": ""
              }
            ],
            "src": "18964:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19541:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19558:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19569:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19551:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19551:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19551:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19592:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19603:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19588:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19588:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19608:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19581:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19581:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19581:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19631:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19642:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19627:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19627:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19647:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19620:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19620:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19620:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19690:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19702:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19713:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19698:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19698:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19690:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19518:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19532:4:54",
                "type": ""
              }
            ],
            "src": "19367:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19901:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19918:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19929:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19911:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19911:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19911:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19952:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19963:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19948:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19948:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19968:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19941:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19941:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19941:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19991:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20002:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19987:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19987:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20007:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19980:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19980:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19980:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20062:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20073:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20058:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20058:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20078:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20051:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20051:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20051:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20091:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20103:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20114:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20099:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20099:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20091:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19878:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19892:4:54",
                "type": ""
              }
            ],
            "src": "19727:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20303:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20320:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20331:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20313:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20313:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20313:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20354:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20365:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20350:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20350:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20370:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20343:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20343:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20343:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20393:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20404:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20389:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20389:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20409:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20382:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20382:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20382:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20453:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20465:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20476:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20461:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20461:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20453:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20280:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20294:4:54",
                "type": ""
              }
            ],
            "src": "20129:356:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, sub(shl(64, 1), 1)) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let value := calldataload(add(headStart, 64))\n        validator_revert_address(value)\n        value4 := value\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint16t_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := abi_decode_uint16(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IIdentity_$1743(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_bool_$dyn_calldata_ptrt_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let value := calldataload(add(headStart, 64))\n        validator_revert_address(value)\n        value4 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_boolt_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n    }\n    function abi_decode_tuple_t_addresst_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let offset_2 := calldataload(add(headStart, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_2), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n        let value := calldataload(add(headStart, 96))\n        validator_revert_address(value)\n        value6 := value\n    }\n    function abi_decode_tuple_t_addresst_contract$_IIdentity_$1743t_uint16t_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_uint16(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n    }\n    function abi_decode_tuple_t_addresst_contract$_IIdentity_$1743t_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_contract$_IIdentity_$1743(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n    }\n    function abi_encode_tuple_t_contract$_IToken_$12234__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32_t_rational_2_by_1__to_t_bytes32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Supply Modif\")\n        mstore(add(headStart, 96), \"ier\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Freezer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_array_address_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            let value_1 := calldataload(srcPtr)\n            validator_revert_address(value_1)\n            mstore(pos, and(value_1, sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        if gt(length, sub(shl(251, 1), 1)) { revert(0, 0) }\n        let length_1 := shl(5, length)\n        calldatacopy(add(pos, 0x20), start, length_1)\n        end := add(add(pos, length_1), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_array_address_dyn_calldata(value0, value1, add(headStart, 64))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_array_uint256_dyn_calldata(value2, value3, tail_1)\n    }\n    function abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Admin\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"Role: Sender is NOT WhiteList Ma\")\n        mstore(add(headStart, 96), \"nager\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_contract$_IIdentityRegistry_$6637_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint16__to_t_address_t_uint16__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), and(value1, 0xffff))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_bool_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_bool_$dyn_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_array_address_dyn_calldata(value0, value1, add(headStart, 64))\n        let _1 := 32\n        mstore(add(headStart, _1), sub(tail_1, headStart))\n        let pos := tail_1\n        mstore(tail_1, value3)\n        pos := add(tail_1, _1)\n        let srcPtr := value2\n        let i := 0\n        for { } lt(i, value3) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_bool(value)\n            mstore(pos, iszero(iszero(value)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_stringliteral_e32366dd69ce1e711b531fd04f64c1eb5d58a6082cb5c93aceedc9d12e9fbf37__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Recovery Age\")\n        mstore(add(headStart, 96), \"nt\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_9d6069cf6b7b2e84c311deb0cbb2c5986516b8eec5088796e841912ade56ef97__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Transfer Man\")\n        mstore(add(headStart, 96), \"ager\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_array_address_dyn_calldata(value0, value1, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        let tail_2 := abi_encode_array_address_dyn_calldata(value2, value3, tail_1)\n        mstore(add(headStart, 64), sub(tail_2, headStart))\n        tail := abi_encode_array_uint256_dyn_calldata(value4, value5, tail_2)\n    }\n    function abi_encode_tuple_t_address_t_contract$_IIdentity_$1743_t_uint16__to_t_address_t_address_t_uint16__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xffff))\n    }\n    function abi_encode_tuple_t_address_t_contract$_IIdentity_$1743__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Roles: account is the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Roles: account already has role\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Roles: account does not have rol\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1286:16729:42:-:0;;;1415:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:13;719:10:20;936:18:13;:32::i;:::-;1453:5:42;:22;;-1:-1:-1;;;;;;1453:22:42;-1:-1:-1;;;;;1453:22:42;;;;;;;;;;1286:16729;;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:290:54:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:54;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:54:o;:::-;1286:16729:42;;;;;;",
  "deployedSourceMap": "1286:16729:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5194:345;;;;;;:::i;:::-;;:::i;:::-;;2402:121:45;;;;;;:::i;:::-;;:::i;:::-;;;1046:14:54;;1039:22;1021:41;;1009:2;994:18;2402:121:45;;;;;;;;12893:386:42;;;;;;:::i;:::-;;:::i;3635:197:45:-;;;;;;:::i;:::-;;:::i;2529:194::-;;;;;;:::i;:::-;;:::i;4678:123::-;;;;;;:::i;:::-;;:::i;16730:405:42:-;;;;;;:::i;:::-;;:::i;3797:226::-;;;;;;:::i;:::-;;:::i;3266:181:45:-;;;;;;:::i;:::-;;:::i;12037:348:42:-;;;;;;:::i;:::-;;:::i;5407:200:45:-;;;;;;:::i;:::-;;:::i;4493:230:42:-;;;;;;:::i;:::-;;:::i;10309:344::-;;;;;;:::i;:::-;;:::i;4807:197:45:-;;;;;;:::i;:::-;;:::i;6020:387:42:-;;;;;;:::i;:::-;;:::i;6878:363::-;;;;;;:::i;:::-;;:::i;1851:112:45:-;;;;;;:::i;:::-;;:::i;5613:208::-;;;;;;:::i;:::-;;:::i;3087:173::-;;;;;;:::i;:::-;;:::i;2156:189::-;;;;;;:::i;:::-;;:::i;9444:371:42:-;;;;;;:::i;:::-;;:::i;2974:107:45:-;;;;;;:::i;:::-;;:::i;1831:101:13:-;;;:::i;4223:191:45:-;;;;;;:::i;:::-;;:::i;4098:119::-;;;;;;:::i;:::-;;:::i;11157:382:42:-;;;;;;:::i;:::-;;:::i;2729:202:45:-;;;;;;:::i;:::-;;:::i;1201:85:13:-;;;:::i;:::-;;;;;;;:::i;7722:401:42:-;;;;;;:::i;:::-;;:::i;3838:205:45:-;;;;;;:::i;:::-;;:::i;8611:335:42:-;;;;;;:::i;:::-;;:::i;13791:448::-;;;;;;:::i;:::-;;:::i;17663:350::-;;;;;;:::i;:::-;;:::i;2873:458::-;;;;;;:::i;:::-;;:::i;5276:125:45:-;;;;;;:::i;:::-;;:::i;14790:474:42:-;;;;;;:::i;:::-;;:::i;5010:205:45:-;;;;;;:::i;:::-;;:::i;4420:199::-;;;;;;:::i;:::-;;:::i;1969:181::-;;;;;;:::i;:::-;;:::i;15792:412:42:-;;;;;;:::i;:::-;;:::i;3506:123:45:-;;;;;;:::i;:::-;;:::i;1974:397:42:-;;;;;;:::i;:::-;;:::i;2081:198:13:-;;;;;;:::i;:::-;;:::i;1389:19:42:-;;;;;-1:-1:-1;;;;;1389:19:42;;;5194:345;5334:37;5359:10;5334:16;:37::i;:::-;:103;;;;;5375:10;-1:-1:-1;;;;;5375:24:42;;5421:10;5410:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;5400:33;;;;;;5435:1;5375:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5313:185;;;;-1:-1:-1;;;5313:185:42;;;;;;;:::i;:::-;;;;;;;;;5508:5;;:24;;-1:-1:-1;;;5508:24:42;;-1:-1:-1;;;;;5508:5:42;;;;:10;;:24;;5519:3;;5524:7;;5508:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5194:345;;;:::o;2402:121:45:-;2465:4;2488:28;:16;2509:6;2488:20;:28::i;:::-;2481:35;2402:121;-1:-1:-1;;2402:121:45:o;12893:386:42:-;13076:30;13094:10;13076:9;:30::i;:::-;:96;;;;;13110:10;-1:-1:-1;;;;;13110:24:42;;13156:10;13145:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;13135:33;;;;;;13170:1;13110:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13068:136;;;;-1:-1:-1;;;13068:136:42;;;;;;;:::i;:::-;13214:5;;:58;;-1:-1:-1;;;13214:58:42;;-1:-1:-1;;;;;13214:5:42;;;;:32;;:58;;13247:14;;;;13263:8;;;;13214:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12893:386;;;;;:::o;3635:197:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;3708:29:::1;:17;3730:6:::0;3708:21:::1;:29::i;:::-;3747:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3747:39:45::1;::::0;::::1;::::0;3801:24;;-1:-1:-1;;;;;3801:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;3801:24:45;::::1;::::0;3747:39;;3801:24:::1;:::i;:::-;;;;;;;;3698:134;3635:197:::0;:::o;2529:194::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2601:28:::1;:16;2622:6:::0;2601:20:::1;:28::i;:::-;2639:38;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2639:38:45::1;::::0;::::1;::::0;2692:24;;-1:-1:-1;;;;;2692:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2692:24:45;::::1;::::0;2639:38;;2692:24:::1;:::i;4678:123::-:0;4742:4;4765:29;:17;4787:6;4765:21;:29::i;16730:405:42:-;16888:39;16915:10;16888:18;:39::i;:::-;:105;;;;;16931:10;-1:-1:-1;;;;;16931:24:42;;16977:10;16966:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;16956:33;;;;;;16991:1;16931:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16867:189;;;;-1:-1:-1;;;16867:189:42;;;;;;;:::i;:::-;17066:5;;;;;;;;;-1:-1:-1;;;;;17066:5:42;-1:-1:-1;;;;;17066:22:42;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;-1:-1:-1;;;17066:62:42;;-1:-1:-1;;;;;14210:32:54;;;17066:62:42;;;14192:51:54;14291:6;14279:19;;14259:18;;;14252:47;17066:38:42;;;;;;;14165:18:54;;17066:62:42;14020:285:54;3797:226:42;3865:30;3883:10;3865:9;:30::i;:::-;:96;;;;;3899:10;-1:-1:-1;;;;;3899:24:42;;3945:10;3934:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3924:33;;;;;;3959:1;3899:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3857:136;;;;-1:-1:-1;;;3857:136:42;;;;;;;:::i;:::-;4003:5;;;;;;;;;-1:-1:-1;;;;;4003:5:42;-1:-1:-1;;;;;4003:11:42;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3797:226;:::o;3266:181:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;3334:24:::1;:9;3351:6:::0;3334:16:::1;:24::i;:::-;3368:31;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3368:31:45::1;::::0;::::1;::::0;3414:26;;-1:-1:-1;;;;;3414:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;3414:26:45;::::1;::::0;3368:31;;3414:26:::1;:::i;12037:348:42:-:0;12190:30;12208:10;12190:9;:30::i;:::-;:96;;;;;12224:10;-1:-1:-1;;;;;12224:24:42;;12270:10;12259:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;12249:33;;;;;;12284:1;12224:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12182:136;;;;-1:-1:-1;;;12182:136:42;;;;;;;:::i;:::-;12328:5;;:50;;-1:-1:-1;;;12328:50:42;;-1:-1:-1;;;;;12328:5:42;;;;:27;;:50;;12356:12;;12370:7;;12328:50;;;:::i;5407:200:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;5481:30:::1;:18;5504:6:::0;5481:22:::1;:30::i;:::-;5521:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5521:40:45::1;::::0;::::1;::::0;5576:24;;-1:-1:-1;;;;;5576:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;5576:24:45;::::1;::::0;5521:40;;5576:24:::1;:::i;4493:230:42:-:0;4563:30;4581:10;4563:9;:30::i;:::-;:96;;;;;4597:10;-1:-1:-1;;;;;4597:24:42;;4643:10;4632:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;4622:33;;;;;;4657:1;4597:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4555:136;;;;-1:-1:-1;;;4555:136:42;;;;;;;:::i;:::-;4701:5;;;;;;;;;-1:-1:-1;;;;;4701:5:42;-1:-1:-1;;;;;4701:13:42;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10309:344;10460:30;10478:10;10460:9;:30::i;:::-;:96;;;;;10494:10;-1:-1:-1;;;;;10494:24:42;;10540:10;10529:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;10519:33;;;;;;10554:1;10494:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10452:136;;;;-1:-1:-1;;;10452:136:42;;;;;;;:::i;:::-;10598:5;;:48;;-1:-1:-1;;;10598:48:42;;-1:-1:-1;;;;;10598:5:42;;;;:25;;:48;;10624:12;;10638:7;;10598:48;;;:::i;4807:197:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;4880:29:::1;:17;4902:6:::0;4880:21:::1;:29::i;:::-;4919:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4919:39:45::1;::::0;::::1;::::0;4973:24;;-1:-1:-1;;;;;4973:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4973:24:45;::::1;::::0;4919:39;;4973:24:::1;:::i;6020:387:42:-:0;6192:37;6217:10;6192:16;:37::i;:::-;:103;;;;;6233:10;-1:-1:-1;;;;;6233:24:42;;6279:10;6268:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;6258:33;;;;;;6293:1;6233:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6171:185;;;;-1:-1:-1;;;6171:185:42;;;;;;;:::i;:::-;6366:5;;:34;;-1:-1:-1;;;6366:34:42;;-1:-1:-1;;;;;6366:5:42;;;;:15;;:34;;6382:7;;;;6391:8;;;;6366:34;;;:::i;6878:363::-;7027:37;7052:10;7027:16;:37::i;:::-;:103;;;;;7068:10;-1:-1:-1;;;;;7068:24:42;;7114:10;7103:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;7093:33;;;;;;7128:1;7068:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7006:185;;;;-1:-1:-1;;;7006:185:42;;;;;;;:::i;:::-;7201:5;;:33;;-1:-1:-1;;;7201:33:42;;-1:-1:-1;;;;;7201:5:42;;;;:10;;:33;;7212:12;;7226:7;;7201:33;;;:::i;1851:112:45:-;1910:4;1933:23;:11;1949:6;1933:15;:23::i;5613:208::-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;5690:33:::1;:18;5716:6:::0;5690:25:::1;:33::i;:::-;5733:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5733:40:45::1;::::0;::::1;::::0;5788:26;;-1:-1:-1;;;;;5788:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;5788:26:45;::::1;::::0;5733:40;;5788:26:::1;:::i;3087:173::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;3152:21:::1;:9;3166:6:::0;3152:13:::1;:21::i;:::-;3183:31;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3183:31:45::1;::::0;::::1;::::0;3229:24;;-1:-1:-1;;;;;3229:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;3229:24:45;::::1;::::0;3183:31;;3229:24:::1;:::i;2156:189::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2227:26:::1;:11;2246:6:::0;2227:18:::1;:26::i;:::-;2263:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2263:34:45::1;::::0;::::1;::::0;2312:26;;-1:-1:-1;;;;;2312:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2312:26:45;::::1;::::0;2263:34;;2312:26:::1;:::i;9444:371:42:-:0;9618:30;9636:10;9618:9;:30::i;:::-;:96;;;;;9652:10;-1:-1:-1;;;;;9652:24:42;;9698:10;9687:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;9677:33;;;;;;9712:1;9652:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9610:136;;;;-1:-1:-1;;;9610:136:42;;;;;;;:::i;:::-;9756:5;;:52;;-1:-1:-1;;;9756:52:42;;-1:-1:-1;;;;;9756:5:42;;;;:27;;:52;;9784:14;;;;9800:7;;;;9756:52;;;:::i;2974:107:45:-;3030:4;3053:21;:9;3067:6;3053:13;:21::i;1831:101:13:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;4223:191:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;4294:27:::1;:15;4314:6:::0;4294:19:::1;:27::i;:::-;4331:37;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4331:37:45::1;::::0;::::1;::::0;4383:24;;-1:-1:-1;;;;;4383:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4383:24:45;::::1;::::0;4331:37;;4383:24:::1;:::i;4098:119::-:0;4160:4;4183:27;:15;4203:6;4183:19;:27::i;11157:382:42:-;11338:30;11356:10;11338:9;:30::i;:::-;:96;;;;;11372:10;-1:-1:-1;;;;;11372:24:42;;11418:10;11407:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;11397:33;;;;;;11432:1;11372:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11330:136;;;;-1:-1:-1;;;11330:136:42;;;;;;;:::i;:::-;11476:5;;:56;;-1:-1:-1;;;11476:56:42;;-1:-1:-1;;;;;11476:5:42;;;;:30;;:56;;11507:14;;;;11523:8;;;;11476:56;;;:::i;2729:202:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2804:31:::1;:16;2828:6:::0;2804:23:::1;:31::i;:::-;2845:38;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2845:38:45::1;::::0;::::1;::::0;2898:26;;-1:-1:-1;;;;;2898:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2898:26:45;::::1;::::0;2845:38;;2898:26:::1;:::i;1201:85:13:-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:13;;1201:85::o;7722:401:42:-;7901:37;7926:10;7901:16;:37::i;:::-;:103;;;;;7942:10;-1:-1:-1;;;;;7942:24:42;;7988:10;7977:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;7967:33;;;;;;8002:1;7942:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7880:185;;;;-1:-1:-1;;;7880:185:42;;;;;;;:::i;:::-;8075:5;;:41;;-1:-1:-1;;;8075:41:42;;-1:-1:-1;;;;;8075:5:42;;;;:15;;:41;;8091:14;;;;8107:8;;;;8075:41;;;:::i;3838:205:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;3914:32:::1;:17;3939:6:::0;3914:24:::1;:32::i;:::-;3956:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3956:39:45::1;::::0;::::1;::::0;4010:26;;-1:-1:-1;;;;;4010:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4010:26:45;::::1;::::0;3956:39;;4010:26:::1;:::i;8611:335:42:-:0;8756:30;8774:10;8756:9;:30::i;:::-;:96;;;;;8790:10;-1:-1:-1;;;;;8790:24:42;;8836:10;8825:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;8815:33;;;;;;8850:1;8790:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8748:136;;;;-1:-1:-1;;;8748:136:42;;;;;;;:::i;:::-;8894:5;;:45;;-1:-1:-1;;;8894:45:42;;-1:-1:-1;;;;;15386:32:54;;;8894:45:42;;;15368:51:54;15462:14;;15455:22;15435:18;;;15428:50;8894:5:42;;;;:22;;15341:18:54;;8894:45:42;15200:284:54;13791:448:42;13988:43;14012:17;13988:15;:43::i;:::-;:116;;;;;14035:17;-1:-1:-1;;;;;14035:31:42;;14088:10;14077:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;14067:33;;;;;;14102:1;14035:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13967:197;;;;-1:-1:-1;;;13967:197:42;;15691:2:54;13967:197:42;;;15673:21:54;15730:2;15710:18;;;15703:30;15769:34;15749:18;;;15742:62;-1:-1:-1;;;15820:18:54;;;15813:32;15862:19;;13967:197:42;15489:398:54;13967:197:42;14174:5;;:58;;-1:-1:-1;;;14174:58:42;;-1:-1:-1;;;;;16150:15:54;;;14174:58:42;;;16132:34:54;16202:15;;;16182:18;;;16175:43;16254:15;;;16234:18;;;16227:43;14174:5:42;;;;:21;;16067:18:54;;14174:58:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17663:350::-;17775:39;17802:10;17775:18;:39::i;:::-;:105;;;;;17818:10;-1:-1:-1;;;;;17818:24:42;;17864:10;17853:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;17843:33;;;;;;17878:1;17818:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17754:189;;;;-1:-1:-1;;;17754:189:42;;;;;;;:::i;:::-;17953:5;;;;;;;;;-1:-1:-1;;;;;17953:5:42;-1:-1:-1;;;;;17953:22:42;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17953:39:42;;17993:12;17953:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17663:350;;:::o;2873:458::-;3093:38;3119:10;3093:17;:38::i;:::-;:104;;;;;3135:10;-1:-1:-1;;;;;3135:24:42;;3181:10;3170:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3160:33;;;;;;3195:1;3135:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3072:187;;;;-1:-1:-1;;;3072:187:42;;;;;;;:::i;:::-;3269:5;;:55;;-1:-1:-1;;;3269:55:42;;-1:-1:-1;;;;;3269:5:42;;;;:25;;:55;;3295:9;;;;3306:7;;;;3315:8;;;;3269:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:458;;;;;;;:::o;5276:125:45:-;5341:4;5364:30;:18;5387:6;5364:22;:30::i;14790:474:42:-;14988:46;15015:17;14988:18;:46::i;:::-;:119;;;;;15038:17;-1:-1:-1;;;;;15038:31:42;;15091:10;15080:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;15070:33;;;;;;15105:1;15038:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14967:203;;;;-1:-1:-1;;;14967:203:42;;;;;;;:::i;:::-;15180:5;;;;;;;;;-1:-1:-1;;;;;15180:5:42;-1:-1:-1;;;;;15180:22:42;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;;-1:-1:-1;;;15180:77:42;;-1:-1:-1;;;;;17715:15:54;;;15180:77:42;;;17697:34:54;17767:15;;;17747:18;;;17740:43;17831:6;17819:19;;17799:18;;;17792:47;15180:41:42;;;;;;;17632:18:54;;15180:77:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14790:474;;;;:::o;5010:205:45:-;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;5086:32:::1;:17;5111:6:::0;5086:24:::1;:32::i;:::-;5128:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5128:39:45::1;::::0;::::1;::::0;5182:26;;-1:-1:-1;;;;;5182:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;5182:26:45;::::1;::::0;5128:39;;5182:26:::1;:::i;4420:199::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;4494:30:::1;:15;4517:6:::0;4494:22:::1;:30::i;:::-;4534:37;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4534:37:45::1;::::0;::::1;::::0;4586:26;;-1:-1:-1;;;;;4586:26:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;4586:26:45;::::1;::::0;4534:37;;4586:26:::1;:::i;1969:181::-:0;1715:10;1704:7;:5;:7::i;:::-;-1:-1:-1;;;;;1704:21:45;;:51;;;-1:-1:-1;1729:26:45;719:10:20;1851:112:45;:::i;1729:26::-;1696:89;;;;-1:-1:-1;;;1696:89:45;;;;;;;:::i;:::-;2037:23:::1;:11;2053:6:::0;2037:15:::1;:23::i;:::-;2070:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2070:34:45::1;::::0;::::1;::::0;2119:24;;-1:-1:-1;;;;;2119:24:45;::::1;::::0;-1:-1:-1;;;;;;;;;;;2119:24:45;::::1;::::0;2070:34;;2119:24:::1;:::i;15792:412:42:-:0;15955:39;15982:10;15955:18;:39::i;:::-;:105;;;;;15998:10;-1:-1:-1;;;;;15998:24:42;;16044:10;16033:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;16023:33;;;;;;16058:1;15998:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15934:189;;;;-1:-1:-1;;;15934:189:42;;;;;;;:::i;:::-;16133:5;;;;;;;;;-1:-1:-1;;;;;16133:5:42;-1:-1:-1;;;;;16133:22:42;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;;-1:-1:-1;;;16133:64:42;;-1:-1:-1;;;;;18098:15:54;;;16133:64:42;;;18080:34:54;18150:15;;;18130:18;;;18123:43;16133:39:42;;;;;;;18015:18:54;;16133:64:42;17850:322:54;3506:123:45;3570:4;3593:29;:17;3615:6;3593:21;:29::i;1974:397:42:-;2147:38;2173:10;2147:17;:38::i;:::-;:104;;;;;2189:10;-1:-1:-1;;;;;2189:24:42;;2235:10;2224:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;2214:33;;;;;;2249:1;2189:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2126:187;;;;-1:-1:-1;;;2126:187:42;;;;;;;:::i;:::-;2323:5;;:41;;-1:-1:-1;;;2323:41:42;;-1:-1:-1;;;;;18435:15:54;;;2323:41:42;;;18417:34:54;18487:15;;;18467:18;;;18460:43;18519:18;;;18512:34;;;2323:5:42;;;;:20;;18352:18:54;;2323:41:42;18177:375:54;2081:198:13;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;18759:2:54;2161:73:13::1;::::0;::::1;18741:21:54::0;18798:2;18778:18;;;18771:30;18837:34;18817:18;;;18810:62;-1:-1:-1;;;18888:18:54;;;18881:36;18934:19;;2161:73:13::1;18557:402:54::0;2161:73:13::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;815:200:50:-;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;19166:2:54;903:68:50;;;19148:21:54;19205:2;19185:18;;;19178:30;19244:34;19224:18;;;19217:62;-1:-1:-1;;;19295:18:54;;;19288:32;19337:19;;903:68:50;18964:398:54;903:68:50;-1:-1:-1;;;;;;988:20:50;:11;:20;;;;;;;;;;;;;;;815:200::o;296:175::-;373:18;377:4;383:7;373:3;:18::i;:::-;372:19;364:63;;;;-1:-1:-1;;;364:63:50;;19569:2:54;364:63:50;;;19551:21:54;19608:2;19588:18;;;19581:30;19647:33;19627:18;;;19620:61;19698:18;;364:63:50;19367:355:54;364:63:50;-1:-1:-1;;;;;437:20:50;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;437:27:50;460:4;437:27;;;296:175::o;546:180::-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;19929:2:54;617:64:50;;;19911:21:54;19968:2;19948:18;;;19941:30;20007:34;19987:18;;;19980:62;-1:-1:-1;;;20058:18:54;;;20051:31;20099:19;;617:64:50;19727:397:54;617:64:50;-1:-1:-1;;;;;691:20:50;714:5;691:20;;;;;;;;;;;:28;;-1:-1:-1;;691:28:50;;;546:180::o;1359:130:13:-;719:10:20;1422:7:13;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:13;;1414:68;;;;-1:-1:-1;;;1414:68:13;;20331:2:54;1414:68:13;;;20313:21:54;;;20350:18;;;20343:30;20409:34;20389:18;;;20382:62;20461:18;;1414:68:13;20129:356:54;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:131:54:-;-1:-1:-1;;;;;89:31:54;;79:42;;69:70;;135:1;132;125:12;150:474;245:6;253;261;314:2;302:9;293:7;289:23;285:32;282:52;;;330:1;327;320:12;282:52;369:9;356:23;388:31;413:5;388:31;:::i;:::-;438:5;-1:-1:-1;490:2:54;475:18;;462:32;;-1:-1:-1;546:2:54;531:18;;518:32;559:33;518:32;559:33;:::i;:::-;611:7;601:17;;;150:474;;;;;:::o;629:247::-;688:6;741:2;729:9;720:7;716:23;712:32;709:52;;;757:1;754;747:12;709:52;796:9;783:23;815:31;840:5;815:31;:::i;:::-;865:5;629:247;-1:-1:-1;;;629:247:54:o;1073:367::-;1136:8;1146:6;1200:3;1193:4;1185:6;1181:17;1177:27;1167:55;;1218:1;1215;1208:12;1167:55;-1:-1:-1;1241:20:54;;-1:-1:-1;;;;;1273:30:54;;1270:50;;;1316:1;1313;1306:12;1270:50;1353:4;1345:6;1341:17;1329:29;;1413:3;1406:4;1396:6;1393:1;1389:14;1381:6;1377:27;1373:38;1370:47;1367:67;;;1430:1;1427;1420:12;1367:67;1073:367;;;;;:::o;1445:926::-;1594:6;1602;1610;1618;1626;1679:2;1667:9;1658:7;1654:23;1650:32;1647:52;;;1695:1;1692;1685:12;1647:52;1722:23;;-1:-1:-1;;;;;1794:14:54;;;1791:34;;;1821:1;1818;1811:12;1791:34;1860:70;1922:7;1913:6;1902:9;1898:22;1860:70;:::i;:::-;1949:8;;-1:-1:-1;1834:96:54;-1:-1:-1;2037:2:54;2022:18;;2009:32;;-1:-1:-1;2053:16:54;;;2050:36;;;2082:1;2079;2072:12;2050:36;;2121:72;2185:7;2174:8;2163:9;2159:24;2121:72;:::i;:::-;2212:8;;-1:-1:-1;2095:98:54;-1:-1:-1;;2297:2:54;2282:18;;2269:32;2310:31;2269:32;2310:31;:::i;:::-;2360:5;2350:15;;;1445:926;;;;;;;;:::o;2376:159::-;2443:20;;2503:6;2492:18;;2482:29;;2472:57;;2525:1;2522;2515:12;2472:57;2376:159;;;:::o;2540:478::-;2634:6;2642;2650;2703:2;2691:9;2682:7;2678:23;2674:32;2671:52;;;2719:1;2716;2709:12;2671:52;2758:9;2745:23;2777:31;2802:5;2777:31;:::i;:::-;2827:5;-1:-1:-1;2851:37:54;2884:2;2869:18;;2851:37;:::i;:::-;2841:47;;2940:2;2929:9;2925:18;2912:32;2953:33;2978:7;2953:33;:::i;4221:203::-;-1:-1:-1;;;;;4385:32:54;;;;4367:51;;4355:2;4340:18;;4221:203::o;4429:118::-;4515:5;4508:13;4501:21;4494:5;4491:32;4481:60;;4537:1;4534;4527:12;4552:541;4644:6;4652;4660;4713:2;4701:9;4692:7;4688:23;4684:32;4681:52;;;4729:1;4726;4719:12;4681:52;4768:9;4755:23;4787:31;4812:5;4787:31;:::i;:::-;4837:5;-1:-1:-1;4894:2:54;4879:18;;4866:32;4907:30;4866:32;4907:30;:::i;5098:689::-;5202:6;5210;5218;5226;5279:3;5267:9;5258:7;5254:23;5250:33;5247:53;;;5296:1;5293;5286:12;5247:53;5335:9;5322:23;5354:31;5379:5;5354:31;:::i;:::-;5404:5;-1:-1:-1;5461:2:54;5446:18;;5433:32;5474:33;5433:32;5474:33;:::i;:::-;5526:7;-1:-1:-1;5585:2:54;5570:18;;5557:32;5598:33;5557:32;5598:33;:::i;:::-;5650:7;-1:-1:-1;5709:2:54;5694:18;;5681:32;5722:33;5681:32;5722:33;:::i;:::-;5098:689;;;;-1:-1:-1;5098:689:54;;-1:-1:-1;;5098:689:54:o;5792:406::-;5878:6;5886;5939:2;5927:9;5918:7;5914:23;5910:32;5907:52;;;5955:1;5952;5945:12;5907:52;5994:9;5981:23;6013:31;6038:5;6013:31;:::i;:::-;6063:5;-1:-1:-1;6120:2:54;6105:18;;6092:32;6133:33;6092:32;6133:33;:::i;:::-;6185:7;6175:17;;;5792:406;;;;;:::o;6203:1242::-;6388:6;6396;6404;6412;6420;6428;6436;6489:3;6477:9;6468:7;6464:23;6460:33;6457:53;;;6506:1;6503;6496:12;6457:53;6533:23;;-1:-1:-1;;;;;6605:14:54;;;6602:34;;;6632:1;6629;6622:12;6602:34;6671:70;6733:7;6724:6;6713:9;6709:22;6671:70;:::i;:::-;6760:8;;-1:-1:-1;6645:96:54;-1:-1:-1;6848:2:54;6833:18;;6820:32;;-1:-1:-1;6864:16:54;;;6861:36;;;6893:1;6890;6883:12;6861:36;6932:72;6996:7;6985:8;6974:9;6970:24;6932:72;:::i;:::-;7023:8;;-1:-1:-1;6906:98:54;-1:-1:-1;7111:2:54;7096:18;;7083:32;;-1:-1:-1;7127:16:54;;;7124:36;;;7156:1;7153;7146:12;7124:36;;7195:72;7259:7;7248:8;7237:9;7233:24;7195:72;:::i;:::-;7286:8;;-1:-1:-1;7169:98:54;-1:-1:-1;;7371:2:54;7356:18;;7343:32;7384:31;7343:32;7384:31;:::i;:::-;7434:5;7424:15;;;6203:1242;;;;;;;;;;:::o;7450:638::-;7571:6;7579;7587;7595;7648:3;7636:9;7627:7;7623:23;7619:33;7616:53;;;7665:1;7662;7655:12;7616:53;7704:9;7691:23;7723:31;7748:5;7723:31;:::i;:::-;7773:5;-1:-1:-1;7830:2:54;7815:18;;7802:32;7843:33;7802:32;7843:33;:::i;:::-;7895:7;-1:-1:-1;7921:37:54;7954:2;7939:18;;7921:37;:::i;8093:565::-;8206:6;8214;8222;8275:2;8263:9;8254:7;8250:23;8246:32;8243:52;;;8291:1;8288;8281:12;8243:52;8330:9;8317:23;8349:31;8374:5;8349:31;:::i;:::-;8399:5;-1:-1:-1;8456:2:54;8441:18;;8428:32;8469:33;8428:32;8469:33;:::i;8663:616::-;8767:6;8775;8783;8791;8844:3;8832:9;8823:7;8819:23;8815:33;8812:53;;;8861:1;8858;8851:12;8812:53;8900:9;8887:23;8919:31;8944:5;8919:31;:::i;:::-;8969:5;-1:-1:-1;9026:2:54;9011:18;;8998:32;9039:33;8998:32;9039:33;:::i;:::-;9091:7;-1:-1:-1;9145:2:54;9130:18;;9117:32;;-1:-1:-1;9201:2:54;9186:18;;9173:32;9214:33;9173:32;9214:33;:::i;9508:256::-;9690:25;;;9746:2;9731:18;;9724:34;9678:2;9663:18;;9508:256::o;9769:245::-;9836:6;9889:2;9877:9;9868:7;9864:23;9860:32;9857:52;;;9905:1;9902;9895:12;9857:52;9937:9;9931:16;9956:28;9978:5;9956:28;:::i;10019:399::-;10221:2;10203:21;;;10260:2;10240:18;;;10233:30;10299:34;10294:2;10279:18;;10272:62;-1:-1:-1;;;10365:2:54;10350:18;;10343:33;10408:3;10393:19;;10019:399::o;10423:274::-;-1:-1:-1;;;;;10615:32:54;;;;10597:51;;10679:2;10664:18;;10657:34;10585:2;10570:18;;10423:274::o;10702:351::-;10904:2;10886:21;;;10943:2;10923:18;;;10916:30;-1:-1:-1;;;10977:2:54;10962:18;;10955:57;11044:2;11029:18;;10702:351::o;11058:522::-;11158:6;11153:3;11146:19;11128:3;11184:4;11213:2;11208:3;11204:12;11197:19;;11239:5;11262:1;11272:283;11286:6;11283:1;11280:13;11272:283;;;11363:6;11350:20;11383:33;11408:7;11383:33;:::i;:::-;-1:-1:-1;;;;;11441:33:54;11429:46;;11495:12;;;;11530:15;;;;11471:1;11301:9;11272:283;;;-1:-1:-1;11571:3:54;;11058:522;-1:-1:-1;;;;;11058:522:54:o;11585:311::-;11673:19;;;11655:3;-1:-1:-1;;;;;11704:31:54;;11701:51;;;11748:1;11745;11738:12;11701:51;11784:6;11781:1;11777:14;11836:8;11829:5;11822:4;11817:3;11813:14;11800:45;11865:18;;;;11885:4;11861:29;;11585:311;-1:-1:-1;;;11585:311:54:o;11901:519::-;12178:2;12167:9;12160:21;12141:4;12204:73;12273:2;12262:9;12258:18;12250:6;12242;12204:73;:::i;:::-;12325:9;12317:6;12313:22;12308:2;12297:9;12293:18;12286:50;12353:61;12407:6;12399;12391;12353:61;:::i;:::-;12345:69;11901:519;-1:-1:-1;;;;;;;11901:519:54:o;12425:349::-;12627:2;12609:21;;;12666:2;12646:18;;;12639:30;-1:-1:-1;;;12700:2:54;12685:18;;12678:55;12765:2;12750:18;;12425:349::o;12779:548::-;12891:4;12920:2;12949;12938:9;12931:21;12981:6;12975:13;13024:6;13019:2;13008:9;13004:18;12997:34;13049:1;13059:140;13073:6;13070:1;13067:13;13059:140;;;13168:14;;;13164:23;;13158:30;13134:17;;;13153:2;13130:26;13123:66;13088:10;;13059:140;;;13063:3;13248:1;13243:2;13234:6;13223:9;13219:22;13215:31;13208:42;13318:2;13311;13307:7;13302:2;13294:6;13290:15;13286:29;13275:9;13271:45;13267:54;13259:62;;;;12779:548;;;;:::o;13332:401::-;13534:2;13516:21;;;13573:2;13553:18;;;13546:30;13612:34;13607:2;13592:18;;13585:62;-1:-1:-1;;;13678:2:54;13663:18;;13656:35;13723:3;13708:19;;13332:401::o;13738:277::-;13834:6;13887:2;13875:9;13866:7;13862:23;13858:32;13855:52;;;13903:1;13900;13893:12;13855:52;13935:9;13929:16;13954:31;13979:5;13954:31;:::i;14310:885::-;14581:2;14570:9;14563:21;14544:4;14607:73;14676:2;14665:9;14661:18;14653:6;14645;14607:73;:::i;:::-;14737:22;;;14699:2;14717:18;;;14710:50;;;;14795:22;;;14871:6;;14833:15;;14895:1;14905:264;14919:6;14916:1;14913:13;14905:264;;;14994:6;14981:20;15014:28;15036:5;15014:28;:::i;:::-;15074:13;15067:21;15055:34;;15144:15;;;;15109:12;;;;14941:1;14934:9;14905:264;;;-1:-1:-1;15186:3:54;14310:885;-1:-1:-1;;;;;;;;14310:885:54:o;16281:400::-;16483:2;16465:21;;;16522:2;16502:18;;;16495:30;16561:34;16556:2;16541:18;;16534:62;-1:-1:-1;;;16627:2:54;16612:18;;16605:34;16671:3;16656:19;;16281:400::o;16686:750::-;17051:2;17040:9;17033:21;17014:4;17077:73;17146:2;17135:9;17131:18;17123:6;17115;17077:73;:::i;:::-;17198:9;17190:6;17186:22;17181:2;17170:9;17166:18;17159:50;17232:61;17286:6;17278;17270;17232:61;:::i;:::-;17218:75;;17341:9;17333:6;17329:22;17324:2;17313:9;17309:18;17302:50;17369:61;17423:6;17415;17407;17369:61;:::i;:::-;17361:69;16686:750;-1:-1:-1;;;;;;;;;16686:750:54:o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport '@onchain-id/solidity/contracts/interface/IIdentity.sol';\n\nimport '../token/IToken.sol';\nimport '../registry/IIdentityRegistry.sol';\nimport './AgentRoles.sol';\n\ncontract AgentManager is AgentRoles {\n    /// @dev the token managed by this AgentManager contract\n    IToken public token;\n\n    constructor(address _token) {\n        token = IToken(_token);\n    }\n\n    /**\n     *  @dev calls the `forcedTransfer` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-forcedTransfer}.\n     *  Requires that `_onchainID` is set as TransferManager on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callForcedTransfer(\n        address _from,\n        address _to,\n        uint256 _amount,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isTransferManager(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT Transfer Manager'\n        );\n        token.forcedTransfer(_from, _to, _amount);\n    }\n\n    /**\n     *  @dev calls the `batchForcedTransfer` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-batchForcedTransfer}.\n     *  Requires that `_onchainID` is set as TransferManager on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callBatchForcedTransfer(\n        address[] calldata _fromList,\n        address[] calldata _toList,\n        uint256[] calldata _amounts,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isTransferManager(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT Transfer Manager'\n        );\n        token.batchForcedTransfer(_fromList, _toList, _amounts);\n    }\n\n    /**\n     *  @dev calls the `pause` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-pause}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callPause(IIdentity _onchainID) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.pause();\n    }\n\n    /**\n     *  @dev calls the `unpause` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-unpause}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callUnpause(IIdentity _onchainID) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.unpause();\n    }\n\n    /**\n     *  @dev calls the `mint` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-mint}.\n     *  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callMint(\n        address _to,\n        uint256 _amount,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isSupplyModifier(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT Supply Modifier'\n        );\n        token.mint(_to, _amount);\n    }\n\n    /**\n     *  @dev calls the `batchMint` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-batchMint}.\n     *  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callBatchMint(\n        address[] calldata _toList,\n        uint256[] calldata _amounts,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isSupplyModifier(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT Supply Modifier'\n        );\n        token.batchMint(_toList, _amounts);\n    }\n\n    /**\n     *  @dev calls the `burn` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-burn}.\n     *  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callBurn(\n        address _userAddress,\n        uint256 _amount,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isSupplyModifier(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT Supply Modifier'\n        );\n        token.burn(_userAddress, _amount);\n    }\n\n    /**\n     *  @dev calls the `batchBurn` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-batchBurn}.\n     *  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callBatchBurn(\n        address[] calldata _userAddresses,\n        uint256[] calldata _amounts,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isSupplyModifier(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT Supply Modifier'\n        );\n        token.batchBurn(_userAddresses, _amounts);\n    }\n\n    /**\n     *  @dev calls the `setAddressFrozen` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-setAddressFrozen}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callSetAddressFrozen(\n        address _userAddress,\n        bool _freeze,\n        IIdentity _onchainID\n    ) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.setAddressFrozen(_userAddress, _freeze);\n    }\n\n    /**\n     *  @dev calls the `batchSetAddressFrozen` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-batchSetAddressFrozen}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callBatchSetAddressFrozen(\n        address[] calldata _userAddresses,\n        bool[] calldata _freeze,\n        IIdentity _onchainID\n    ) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.batchSetAddressFrozen(_userAddresses, _freeze);\n    }\n\n    /**\n     *  @dev calls the `freezePartialTokens` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-freezePartialTokens}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callFreezePartialTokens(\n        address _userAddress,\n        uint256 _amount,\n        IIdentity _onchainID\n    ) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.freezePartialTokens(_userAddress, _amount);\n    }\n\n    /**\n     *  @dev calls the `batchFreezePartialTokens` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-batchFreezePartialTokens}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callBatchFreezePartialTokens(\n        address[] calldata _userAddresses,\n        uint256[] calldata _amounts,\n        IIdentity _onchainID\n    ) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.batchFreezePartialTokens(_userAddresses, _amounts);\n    }\n\n    /**\n     *  @dev calls the `unfreezePartialTokens` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-unfreezePartialTokens}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callUnfreezePartialTokens(\n        address _userAddress,\n        uint256 _amount,\n        IIdentity _onchainID\n    ) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.unfreezePartialTokens(_userAddress, _amount);\n    }\n\n    /**\n     *  @dev calls the `batchUnfreezePartialTokens` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-batchUnfreezePartialTokens}.\n     *  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callBatchUnfreezePartialTokens(\n        address[] calldata _userAddresses,\n        uint256[] calldata _amounts,\n        IIdentity _onchainID\n    ) external {\n        require(isFreezer(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), 'Role: Sender is NOT Freezer');\n        token.batchUnfreezePartialTokens(_userAddresses, _amounts);\n    }\n\n    /**\n     *  @dev calls the `recoveryAddress` function on the Token contract\n     *  AgentManager has to be set as agent on the token smart contract to process this function\n     *  See {IToken-recoveryAddress}.\n     *  Requires that `_managerOnchainID` is set as RecoveryAgent on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`\n     *  @param _managerOnchainID the onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callRecoveryAddress(\n        address _lostWallet,\n        address _newWallet,\n        address _onchainID,\n        IIdentity _managerOnchainID\n    ) external {\n        require(\n            isRecoveryAgent(address(_managerOnchainID)) && _managerOnchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT Recovery Agent'\n        );\n        token.recoveryAddress(_lostWallet, _newWallet, _onchainID);\n    }\n\n    /**\n     *  @dev calls the `registerIdentity` function on the Identity Registry contract\n     *  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n     *  See {IIdentityRegistry-registerIdentity}.\n     *  Requires that `ManagerOnchainID` is set as WhiteListManager on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`\n     *  @param _managerOnchainID the onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callRegisterIdentity(\n        address _userAddress,\n        IIdentity _onchainID,\n        uint16 _country,\n        IIdentity _managerOnchainID\n    ) external {\n        require(\n            isWhiteListManager(address(_managerOnchainID)) && _managerOnchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT WhiteList Manager'\n        );\n        token.identityRegistry().registerIdentity(_userAddress, _onchainID, _country);\n    }\n\n    /**\n     *  @dev calls the `updateIdentity` function on the Identity Registry contract\n     *  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n     *  See {IIdentityRegistry-updateIdentity}.\n     *  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callUpdateIdentity(\n        address _userAddress,\n        IIdentity _identity,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isWhiteListManager(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT WhiteList Manager'\n        );\n        token.identityRegistry().updateIdentity(_userAddress, _identity);\n    }\n\n    /**\n     *  @dev calls the `updateCountry` function on the Identity Registry contract\n     *  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n     *  See {IIdentityRegistry-updateCountry}.\n     *  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callUpdateCountry(\n        address _userAddress,\n        uint16 _country,\n        IIdentity _onchainID\n    ) external {\n        require(\n            isWhiteListManager(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT WhiteList Manager'\n        );\n        token.identityRegistry().updateCountry(_userAddress, _country);\n    }\n\n    /**\n     *  @dev calls the `deleteIdentity` function on the Identity Registry contract\n     *  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n     *  See {IIdentityRegistry-deleteIdentity}.\n     *  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract\n     *  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n     *  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\"\n     */\n    function callDeleteIdentity(address _userAddress, IIdentity _onchainID) external {\n        require(\n            isWhiteListManager(address(_onchainID)) && _onchainID.keyHasPurpose(keccak256(abi.encode(msg.sender)), 2),\n            'Role: Sender is NOT WhiteList Manager'\n        );\n        token.identityRegistry().deleteIdentity(_userAddress);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/roles/AgentManager.sol",
  "ast": {
    "absolutePath": "project:/contracts/roles/AgentManager.sol",
    "exportedSymbols": {
      "AgentManager": [
        9037
      ],
      "AgentRoles": [
        9685
      ],
      "Context": [
        3401
      ],
      "IClaimIssuer": [
        1456
      ],
      "IClaimTopicsRegistry": [
        6444
      ],
      "ICompliance": [
        5596
      ],
      "IERC20": [
        3317
      ],
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "IIdentityRegistry": [
        6637
      ],
      "IIdentityRegistryStorage": [
        6759
      ],
      "IToken": [
        12234
      ],
      "ITrustedIssuersRegistry": [
        6856
      ],
      "Ownable": [
        2505
      ],
      "Roles": [
        11901
      ]
    },
    "id": 9038,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8215,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:42"
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "file": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "id": 8216,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9038,
        "sourceUnit": 1744,
        "src": "1118:64:42",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/IToken.sol",
        "file": "../token/IToken.sol",
        "id": 8217,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9038,
        "sourceUnit": 12235,
        "src": "1184:29:42",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IIdentityRegistry.sol",
        "file": "../registry/IIdentityRegistry.sol",
        "id": 8218,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9038,
        "sourceUnit": 6638,
        "src": "1214:43:42",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/AgentRoles.sol",
        "file": "./AgentRoles.sol",
        "id": 8219,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9038,
        "sourceUnit": 9686,
        "src": "1258:26:42",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 8220,
              "name": "AgentRoles",
              "nameLocations": [
                "1311:10:42"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9685,
              "src": "1311:10:42"
            },
            "id": 8221,
            "nodeType": "InheritanceSpecifier",
            "src": "1311:10:42"
          }
        ],
        "canonicalName": "AgentManager",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 9037,
        "linearizedBaseContracts": [
          9037,
          9685,
          2505,
          3401
        ],
        "name": "AgentManager",
        "nameLocation": "1295:12:42",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "documentation": {
              "id": 8222,
              "nodeType": "StructuredDocumentation",
              "src": "1328:56:42",
              "text": "@dev the token managed by this AgentManager contract"
            },
            "functionSelector": "fc0c546a",
            "id": 8225,
            "mutability": "mutable",
            "name": "token",
            "nameLocation": "1403:5:42",
            "nodeType": "VariableDeclaration",
            "scope": 9037,
            "src": "1389:19:42",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IToken_$12234",
              "typeString": "contract IToken"
            },
            "typeName": {
              "id": 8224,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 8223,
                "name": "IToken",
                "nameLocations": [
                  "1389:6:42"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 12234,
                "src": "1389:6:42"
              },
              "referencedDeclaration": 12234,
              "src": "1389:6:42",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IToken_$12234",
                "typeString": "contract IToken"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 8236,
              "nodeType": "Block",
              "src": "1443:39:42",
              "statements": [
                {
                  "expression": {
                    "id": 8234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8230,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8225,
                      "src": "1453:5:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IToken_$12234",
                        "typeString": "contract IToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8232,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8227,
                          "src": "1468:6:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8231,
                        "name": "IToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12234,
                        "src": "1461:6:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IToken_$12234_$",
                          "typeString": "type(contract IToken)"
                        }
                      },
                      "id": 8233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1461:14:42",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IToken_$12234",
                        "typeString": "contract IToken"
                      }
                    },
                    "src": "1453:22:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IToken_$12234",
                      "typeString": "contract IToken"
                    }
                  },
                  "id": 8235,
                  "nodeType": "ExpressionStatement",
                  "src": "1453:22:42"
                }
              ]
            },
            "id": 8237,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8227,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "1435:6:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8237,
                  "src": "1427:14:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1427:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1426:16:42"
            },
            "returnParameters": {
              "id": 8229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1443:0:42"
            },
            "scope": 9037,
            "src": "1415:67:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8280,
              "nodeType": "Block",
              "src": "2116:255:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8254,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8247,
                                  "src": "2173:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8253,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2165:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8252,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2165:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8255,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2165:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8251,
                            "name": "isTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9458,
                            "src": "2147:17:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2147:38:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8262,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "2235:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8263,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "2239:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "2235:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8260,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "2224:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8261,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "2228:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "2224:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8264,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2224:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8259,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "2214:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2214:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2249:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8257,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8247,
                              "src": "2189:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8258,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2200:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "2189:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2189:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2147:104:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f54205472616e73666572204d616e61676572",
                        "id": 8269,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2265:38:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d6069cf6b7b2e84c311deb0cbb2c5986516b8eec5088796e841912ade56ef97",
                          "typeString": "literal_string \"Role: Sender is NOT Transfer Manager\""
                        },
                        "value": "Role: Sender is NOT Transfer Manager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d6069cf6b7b2e84c311deb0cbb2c5986516b8eec5088796e841912ade56ef97",
                          "typeString": "literal_string \"Role: Sender is NOT Transfer Manager\""
                        }
                      ],
                      "id": 8250,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2126:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2126:187:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8271,
                  "nodeType": "ExpressionStatement",
                  "src": "2126:187:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8275,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8240,
                        "src": "2344:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8276,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "2351:3:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8277,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8244,
                        "src": "2356:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8272,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "2323:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2329:14:42",
                      "memberName": "forcedTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12114,
                      "src": "2323:20:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2323:41:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8279,
                  "nodeType": "ExpressionStatement",
                  "src": "2323:41:42"
                }
              ]
            },
            "documentation": {
              "id": 8238,
              "nodeType": "StructuredDocumentation",
              "src": "1488:481:42",
              "text": "  @dev calls the `forcedTransfer` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-forcedTransfer}.\n  Requires that `_onchainID` is set as TransferManager on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "f1e92173",
            "id": 8281,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callForcedTransfer",
            "nameLocation": "1983:18:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8240,
                  "mutability": "mutable",
                  "name": "_from",
                  "nameLocation": "2019:5:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8281,
                  "src": "2011:13:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8239,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2011:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8242,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "2042:3:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8281,
                  "src": "2034:11:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8241,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2034:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8244,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "2063:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8281,
                  "src": "2055:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2055:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8247,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "2090:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8281,
                  "src": "2080:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8246,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8245,
                      "name": "IIdentity",
                      "nameLocations": [
                        "2080:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "2080:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "2080:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2001:105:42"
            },
            "returnParameters": {
              "id": 8249,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2116:0:42"
            },
            "scope": 9037,
            "src": "1974:397:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8327,
              "nodeType": "Block",
              "src": "3062:269:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8301,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8294,
                                  "src": "3119:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8300,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3111:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8299,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3111:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8302,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3111:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8298,
                            "name": "isTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9458,
                            "src": "3093:17:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3093:38:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8309,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "3181:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8310,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "3185:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "3181:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8307,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "3170:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8308,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "3174:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "3170:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8311,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3170:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8306,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "3160:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3160:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8313,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3195:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8304,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8294,
                              "src": "3135:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3146:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "3135:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3135:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3093:104:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f54205472616e73666572204d616e61676572",
                        "id": 8316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3211:38:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d6069cf6b7b2e84c311deb0cbb2c5986516b8eec5088796e841912ade56ef97",
                          "typeString": "literal_string \"Role: Sender is NOT Transfer Manager\""
                        },
                        "value": "Role: Sender is NOT Transfer Manager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d6069cf6b7b2e84c311deb0cbb2c5986516b8eec5088796e841912ade56ef97",
                          "typeString": "literal_string \"Role: Sender is NOT Transfer Manager\""
                        }
                      ],
                      "id": 8297,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3072:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3072:187:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8318,
                  "nodeType": "ExpressionStatement",
                  "src": "3072:187:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8322,
                        "name": "_fromList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8285,
                        "src": "3295:9:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 8323,
                        "name": "_toList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8288,
                        "src": "3306:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 8324,
                        "name": "_amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8291,
                        "src": "3315:8:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 8319,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "3269:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8321,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3275:19:42",
                      "memberName": "batchForcedTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12165,
                      "src": "3269:25:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,address[] memory,uint256[] memory) external"
                      }
                    },
                    "id": 8325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3269:55:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8326,
                  "nodeType": "ExpressionStatement",
                  "src": "3269:55:42"
                }
              ]
            },
            "documentation": {
              "id": 8282,
              "nodeType": "StructuredDocumentation",
              "src": "2377:491:42",
              "text": "  @dev calls the `batchForcedTransfer` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-batchForcedTransfer}.\n  Requires that `_onchainID` is set as TransferManager on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "b673266a",
            "id": 8328,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callBatchForcedTransfer",
            "nameLocation": "2882:23:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8285,
                  "mutability": "mutable",
                  "name": "_fromList",
                  "nameLocation": "2934:9:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8328,
                  "src": "2915:28:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8283,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2915:7:42",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8284,
                    "nodeType": "ArrayTypeName",
                    "src": "2915:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8288,
                  "mutability": "mutable",
                  "name": "_toList",
                  "nameLocation": "2972:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8328,
                  "src": "2953:26:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8286,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2953:7:42",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8287,
                    "nodeType": "ArrayTypeName",
                    "src": "2953:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8291,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "3008:8:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8328,
                  "src": "2989:27:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8289,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2989:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8290,
                    "nodeType": "ArrayTypeName",
                    "src": "2989:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8294,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "3036:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8328,
                  "src": "3026:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8293,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8292,
                      "name": "IIdentity",
                      "nameLocations": [
                        "3026:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "3026:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "3026:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2905:147:42"
            },
            "returnParameters": {
              "id": 8296,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3062:0:42"
            },
            "scope": 9037,
            "src": "2873:458:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8362,
              "nodeType": "Block",
              "src": "3847:176:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8353,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8339,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8332,
                                  "src": "3883:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8338,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3875:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8337,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3875:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3875:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8336,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "3865:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8341,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3865:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8347,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "3945:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8348,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "3949:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "3945:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8345,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "3934:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8346,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "3938:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "3934:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8349,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3934:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8344,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "3924:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3924:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3959:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8342,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8332,
                              "src": "3899:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3910:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "3899:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3899:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3865:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8354,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3963:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8335,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3857:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3857:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8356,
                  "nodeType": "ExpressionStatement",
                  "src": "3857:136:42"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 8357,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "4003:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8359,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4009:5:42",
                      "memberName": "pause",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12062,
                      "src": "4003:11:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 8360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4003:13:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8361,
                  "nodeType": "ExpressionStatement",
                  "src": "4003:13:42"
                }
              ]
            },
            "documentation": {
              "id": 8329,
              "nodeType": "StructuredDocumentation",
              "src": "3337:455:42",
              "text": "  @dev calls the `pause` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-pause}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "24fdc360",
            "id": 8363,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callPause",
            "nameLocation": "3806:9:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8332,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "3826:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8363,
                  "src": "3816:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8331,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8330,
                      "name": "IIdentity",
                      "nameLocations": [
                        "3816:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "3816:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "3816:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3815:22:42"
            },
            "returnParameters": {
              "id": 8334,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3847:0:42"
            },
            "scope": 9037,
            "src": "3797:226:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8397,
              "nodeType": "Block",
              "src": "4545:178:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8374,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8367,
                                  "src": "4581:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8373,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4573:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8372,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4573:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4573:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8371,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "4563:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4563:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8382,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "4643:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8383,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "4647:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "4643:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8380,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "4632:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8381,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "4636:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "4632:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8384,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4632:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8379,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "4622:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8385,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4622:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8386,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4657:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8377,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8367,
                              "src": "4597:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4608:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "4597:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4597:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4563:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4661:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8370,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4555:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4555:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8391,
                  "nodeType": "ExpressionStatement",
                  "src": "4555:136:42"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 8392,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "4701:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4707:7:42",
                      "memberName": "unpause",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12066,
                      "src": "4701:13:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 8395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4701:15:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8396,
                  "nodeType": "ExpressionStatement",
                  "src": "4701:15:42"
                }
              ]
            },
            "documentation": {
              "id": 8364,
              "nodeType": "StructuredDocumentation",
              "src": "4029:459:42",
              "text": "  @dev calls the `unpause` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-unpause}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "39cc8d90",
            "id": 8398,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callUnpause",
            "nameLocation": "4502:11:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8368,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8367,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "4524:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8398,
                  "src": "4514:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8366,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8365,
                      "name": "IIdentity",
                      "nameLocations": [
                        "4514:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "4514:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "4514:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4513:22:42"
            },
            "returnParameters": {
              "id": 8369,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4545:0:42"
            },
            "scope": 9037,
            "src": "4493:230:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8438,
              "nodeType": "Block",
              "src": "5303:236:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8413,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8406,
                                  "src": "5359:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5351:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8411,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5351:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5351:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8410,
                            "name": "isSupplyModifier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9338,
                            "src": "5334:16:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5334:37:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8421,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "5421:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8422,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "5425:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "5421:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8419,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "5410:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8420,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "5414:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "5410:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8423,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5410:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8418,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "5400:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5400:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5435:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8416,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8406,
                              "src": "5375:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5386:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "5375:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5375:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5334:103:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420537570706c79204d6f646966696572",
                        "id": 8428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5451:37:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        },
                        "value": "Role: Sender is NOT Supply Modifier"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        }
                      ],
                      "id": 8409,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5313:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5313:185:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8430,
                  "nodeType": "ExpressionStatement",
                  "src": "5313:185:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8434,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8401,
                        "src": "5519:3:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8435,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8403,
                        "src": "5524:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8431,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "5508:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5514:4:42",
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12122,
                      "src": "5508:10:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5508:24:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8437,
                  "nodeType": "ExpressionStatement",
                  "src": "5508:24:42"
                }
              ]
            },
            "documentation": {
              "id": 8399,
              "nodeType": "StructuredDocumentation",
              "src": "4729:460:42",
              "text": "  @dev calls the `mint` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-mint}.\n  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "0102acff",
            "id": 8439,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callMint",
            "nameLocation": "5203:8:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8401,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "5229:3:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8439,
                  "src": "5221:11:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8400,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5221:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8403,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5250:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8439,
                  "src": "5242:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5242:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8406,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "5277:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8439,
                  "src": "5267:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8405,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8404,
                      "name": "IIdentity",
                      "nameLocations": [
                        "5267:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "5267:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "5267:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5211:82:42"
            },
            "returnParameters": {
              "id": 8408,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5303:0:42"
            },
            "scope": 9037,
            "src": "5194:345:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8481,
              "nodeType": "Block",
              "src": "6161:246:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8456,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8449,
                                  "src": "6217:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6209:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8454,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6209:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8457,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6209:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8453,
                            "name": "isSupplyModifier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9338,
                            "src": "6192:16:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6192:37:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8464,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "6279:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8465,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "6283:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "6279:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8462,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "6268:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8463,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "6272:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "6268:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8466,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6268:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8461,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "6258:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6258:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8468,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6293:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8459,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8449,
                              "src": "6233:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8460,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6244:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "6233:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6233:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6192:103:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420537570706c79204d6f646966696572",
                        "id": 8471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6309:37:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        },
                        "value": "Role: Sender is NOT Supply Modifier"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        }
                      ],
                      "id": 8452,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6171:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6171:185:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8473,
                  "nodeType": "ExpressionStatement",
                  "src": "6171:185:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8477,
                        "name": "_toList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8443,
                        "src": "6382:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 8478,
                        "name": "_amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8446,
                        "src": "6391:8:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 8474,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "6366:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6372:9:42",
                      "memberName": "batchMint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12175,
                      "src": "6366:15:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,uint256[] memory) external"
                      }
                    },
                    "id": 8479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6366:34:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8480,
                  "nodeType": "ExpressionStatement",
                  "src": "6366:34:42"
                }
              ]
            },
            "documentation": {
              "id": 8440,
              "nodeType": "StructuredDocumentation",
              "src": "5545:470:42",
              "text": "  @dev calls the `batchMint` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-batchMint}.\n  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "3dc1c176",
            "id": 8482,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callBatchMint",
            "nameLocation": "6029:13:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8443,
                  "mutability": "mutable",
                  "name": "_toList",
                  "nameLocation": "6071:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8482,
                  "src": "6052:26:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8441,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6052:7:42",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8442,
                    "nodeType": "ArrayTypeName",
                    "src": "6052:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8446,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "6107:8:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8482,
                  "src": "6088:27:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8444,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6088:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8445,
                    "nodeType": "ArrayTypeName",
                    "src": "6088:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8449,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "6135:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8482,
                  "src": "6125:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8448,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8447,
                      "name": "IIdentity",
                      "nameLocations": [
                        "6125:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "6125:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "6125:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6042:109:42"
            },
            "returnParameters": {
              "id": 8451,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6161:0:42"
            },
            "scope": 9037,
            "src": "6020:387:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8522,
              "nodeType": "Block",
              "src": "6996:245:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8511,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8497,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8490,
                                  "src": "7052:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7044:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8495,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7044:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8498,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7044:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8494,
                            "name": "isSupplyModifier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9338,
                            "src": "7027:16:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7027:37:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8505,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "7114:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8506,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "7118:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "7114:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8503,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "7103:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8504,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "7107:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "7103:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8507,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7103:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8502,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "7093:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8508,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7093:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7128:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8500,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8490,
                              "src": "7068:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8501,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7079:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "7068:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7068:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7027:103:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420537570706c79204d6f646966696572",
                        "id": 8512,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7144:37:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        },
                        "value": "Role: Sender is NOT Supply Modifier"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        }
                      ],
                      "id": 8493,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7006:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7006:185:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8514,
                  "nodeType": "ExpressionStatement",
                  "src": "7006:185:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8518,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8485,
                        "src": "7212:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8519,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8487,
                        "src": "7226:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8515,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "7201:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8517,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7207:4:42",
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12130,
                      "src": "7201:10:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7201:33:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8521,
                  "nodeType": "ExpressionStatement",
                  "src": "7201:33:42"
                }
              ]
            },
            "documentation": {
              "id": 8483,
              "nodeType": "StructuredDocumentation",
              "src": "6413:460:42",
              "text": "  @dev calls the `burn` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-burn}.\n  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "41e6aa5d",
            "id": 8523,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callBurn",
            "nameLocation": "6887:8:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8485,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "6913:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8523,
                  "src": "6905:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8484,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6905:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8487,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "6943:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8523,
                  "src": "6935:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8486,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6935:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8490,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "6970:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8523,
                  "src": "6960:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8489,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8488,
                      "name": "IIdentity",
                      "nameLocations": [
                        "6960:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "6960:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "6960:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6895:91:42"
            },
            "returnParameters": {
              "id": 8492,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6996:0:42"
            },
            "scope": 9037,
            "src": "6878:363:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8565,
              "nodeType": "Block",
              "src": "7870:253:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8540,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8533,
                                  "src": "7926:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7918:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8538,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7918:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7918:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8537,
                            "name": "isSupplyModifier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9338,
                            "src": "7901:16:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7901:37:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8548,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "7988:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8549,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "7992:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "7988:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8546,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "7977:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8547,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "7981:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "7977:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8550,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7977:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8545,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "7967:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8551,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7967:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8552,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8002:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8543,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8533,
                              "src": "7942:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7953:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "7942:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8553,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7942:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7901:103:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420537570706c79204d6f646966696572",
                        "id": 8555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8018:37:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        },
                        "value": "Role: Sender is NOT Supply Modifier"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e2d3513e174496c06f8ade1cc525aab8d8749f82298541d97b596f63108cfbc9",
                          "typeString": "literal_string \"Role: Sender is NOT Supply Modifier\""
                        }
                      ],
                      "id": 8536,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7880:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7880:185:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8557,
                  "nodeType": "ExpressionStatement",
                  "src": "7880:185:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8561,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8527,
                        "src": "8091:14:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 8562,
                        "name": "_amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8530,
                        "src": "8107:8:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 8558,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "8075:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8081:9:42",
                      "memberName": "batchBurn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12185,
                      "src": "8075:15:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,uint256[] memory) external"
                      }
                    },
                    "id": 8563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8075:41:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8564,
                  "nodeType": "ExpressionStatement",
                  "src": "8075:41:42"
                }
              ]
            },
            "documentation": {
              "id": 8524,
              "nodeType": "StructuredDocumentation",
              "src": "7247:470:42",
              "text": "  @dev calls the `batchBurn` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-batchBurn}.\n  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "94452821",
            "id": 8566,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callBatchBurn",
            "nameLocation": "7731:13:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8527,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "7773:14:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8566,
                  "src": "7754:33:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8525,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "7754:7:42",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8526,
                    "nodeType": "ArrayTypeName",
                    "src": "7754:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8530,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "7816:8:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8566,
                  "src": "7797:27:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8528,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "7797:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8529,
                    "nodeType": "ArrayTypeName",
                    "src": "7797:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8533,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "7844:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8566,
                  "src": "7834:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8532,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8531,
                      "name": "IIdentity",
                      "nameLocations": [
                        "7834:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "7834:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "7834:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7744:116:42"
            },
            "returnParameters": {
              "id": 8535,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7870:0:42"
            },
            "scope": 9037,
            "src": "7722:401:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8606,
              "nodeType": "Block",
              "src": "8738:208:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8595,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8581,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8574,
                                  "src": "8774:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8580,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8766:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8579,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8766:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8582,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8766:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8578,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "8756:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8756:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8589,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "8836:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8590,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8840:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "8836:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8587,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "8825:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8588,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "8829:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "8825:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8591,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8825:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8586,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "8815:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8815:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8850:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8584,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8574,
                              "src": "8790:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8585,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8801:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "8790:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8790:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8756:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8854:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8577,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "8748:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8748:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8598,
                  "nodeType": "ExpressionStatement",
                  "src": "8748:136:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8602,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8569,
                        "src": "8917:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8603,
                        "name": "_freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8571,
                        "src": "8931:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "id": 8599,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "8894:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8601,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8900:16:42",
                      "memberName": "setAddressFrozen",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12074,
                      "src": "8894:22:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool) external"
                      }
                    },
                    "id": 8604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8894:45:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8605,
                  "nodeType": "ExpressionStatement",
                  "src": "8894:45:42"
                }
              ]
            },
            "documentation": {
              "id": 8567,
              "nodeType": "StructuredDocumentation",
              "src": "8129:477:42",
              "text": "  @dev calls the `setAddressFrozen` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-setAddressFrozen}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "96df6f27",
            "id": 8607,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callSetAddressFrozen",
            "nameLocation": "8620:20:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8569,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "8658:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8607,
                  "src": "8650:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8568,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8650:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8571,
                  "mutability": "mutable",
                  "name": "_freeze",
                  "nameLocation": "8685:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8607,
                  "src": "8680:12:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8570,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8680:4:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8574,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "8712:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8607,
                  "src": "8702:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8573,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8572,
                      "name": "IIdentity",
                      "nameLocations": [
                        "8702:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "8702:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "8702:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8640:88:42"
            },
            "returnParameters": {
              "id": 8576,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8738:0:42"
            },
            "scope": 9037,
            "src": "8611:335:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8649,
              "nodeType": "Block",
              "src": "9600:215:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8624,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8617,
                                  "src": "9636:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9628:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8622,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9628:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8625,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9628:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8621,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "9618:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9618:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8632,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "9698:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8633,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "9702:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "9698:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8630,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "9687:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8631,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "9691:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "9687:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8634,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9687:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8629,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "9677:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9677:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8636,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9712:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8627,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8617,
                              "src": "9652:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9663:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "9652:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9652:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9618:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8639,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9716:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8620,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "9610:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8640,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9610:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8641,
                  "nodeType": "ExpressionStatement",
                  "src": "9610:136:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8645,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8611,
                        "src": "9784:14:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 8646,
                        "name": "_freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8614,
                        "src": "9800:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                          "typeString": "bool[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                          "typeString": "bool[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 8642,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "9756:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9762:21:42",
                      "memberName": "batchSetAddressFrozen",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12195,
                      "src": "9756:27:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_bool_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,bool[] memory) external"
                      }
                    },
                    "id": 8647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9756:52:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8648,
                  "nodeType": "ExpressionStatement",
                  "src": "9756:52:42"
                }
              ]
            },
            "documentation": {
              "id": 8608,
              "nodeType": "StructuredDocumentation",
              "src": "8952:487:42",
              "text": "  @dev calls the `batchSetAddressFrozen` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-batchSetAddressFrozen}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "6b8c82b5",
            "id": 8650,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callBatchSetAddressFrozen",
            "nameLocation": "9453:25:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8611,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "9507:14:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8650,
                  "src": "9488:33:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8609,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9488:7:42",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8610,
                    "nodeType": "ArrayTypeName",
                    "src": "9488:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8614,
                  "mutability": "mutable",
                  "name": "_freeze",
                  "nameLocation": "9547:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8650,
                  "src": "9531:23:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                    "typeString": "bool[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8612,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "9531:4:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 8613,
                    "nodeType": "ArrayTypeName",
                    "src": "9531:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                      "typeString": "bool[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8617,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "9574:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8650,
                  "src": "9564:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8616,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8615,
                      "name": "IIdentity",
                      "nameLocations": [
                        "9564:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "9564:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "9564:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9478:112:42"
            },
            "returnParameters": {
              "id": 8619,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9600:0:42"
            },
            "scope": 9037,
            "src": "9444:371:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8690,
              "nodeType": "Block",
              "src": "10442:211:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8665,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8658,
                                  "src": "10478:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8664,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10470:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8663,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10470:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8666,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10470:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8662,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "10460:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10460:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8673,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "10540:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8674,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "10544:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "10540:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8671,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "10529:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8672,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "10533:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "10529:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10529:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8670,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "10519:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10519:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10554:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8668,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8658,
                              "src": "10494:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8669,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10505:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "10494:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10494:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10460:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10558:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8661,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "10452:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10452:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8682,
                  "nodeType": "ExpressionStatement",
                  "src": "10452:136:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8686,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8653,
                        "src": "10624:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8687,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8655,
                        "src": "10638:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8683,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "10598:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10604:19:42",
                      "memberName": "freezePartialTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12082,
                      "src": "10598:25:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10598:48:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8689,
                  "nodeType": "ExpressionStatement",
                  "src": "10598:48:42"
                }
              ]
            },
            "documentation": {
              "id": 8651,
              "nodeType": "StructuredDocumentation",
              "src": "9821:483:42",
              "text": "  @dev calls the `freezePartialTokens` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-freezePartialTokens}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "39ed7a40",
            "id": 8691,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callFreezePartialTokens",
            "nameLocation": "10318:23:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8653,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "10359:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8691,
                  "src": "10351:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8652,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10351:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8655,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "10389:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8691,
                  "src": "10381:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8654,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10381:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8658,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "10416:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8691,
                  "src": "10406:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8657,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8656,
                      "name": "IIdentity",
                      "nameLocations": [
                        "10406:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "10406:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "10406:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10341:91:42"
            },
            "returnParameters": {
              "id": 8660,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10442:0:42"
            },
            "scope": 9037,
            "src": "10309:344:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8733,
              "nodeType": "Block",
              "src": "11320:219:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8708,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8701,
                                  "src": "11356:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8707,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11348:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8706,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11348:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11348:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8705,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "11338:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11338:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8716,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "11418:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8717,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "11422:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "11418:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8714,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "11407:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8715,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "11411:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "11407:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8718,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11407:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8713,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "11397:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11397:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11432:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8711,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8701,
                              "src": "11372:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11383:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "11372:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11372:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11338:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8723,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11436:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8704,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11330:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8724,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11330:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8725,
                  "nodeType": "ExpressionStatement",
                  "src": "11330:136:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8729,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8695,
                        "src": "11507:14:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 8730,
                        "name": "_amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8698,
                        "src": "11523:8:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 8726,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "11476:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8728,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11482:24:42",
                      "memberName": "batchFreezePartialTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12205,
                      "src": "11476:30:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,uint256[] memory) external"
                      }
                    },
                    "id": 8731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11476:56:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8732,
                  "nodeType": "ExpressionStatement",
                  "src": "11476:56:42"
                }
              ]
            },
            "documentation": {
              "id": 8692,
              "nodeType": "StructuredDocumentation",
              "src": "10659:493:42",
              "text": "  @dev calls the `batchFreezePartialTokens` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-batchFreezePartialTokens}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "7d684ff7",
            "id": 8734,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callBatchFreezePartialTokens",
            "nameLocation": "11166:28:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8695,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "11223:14:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8734,
                  "src": "11204:33:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8693,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "11204:7:42",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8694,
                    "nodeType": "ArrayTypeName",
                    "src": "11204:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8698,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "11266:8:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8734,
                  "src": "11247:27:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8696,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11247:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8697,
                    "nodeType": "ArrayTypeName",
                    "src": "11247:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8701,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "11294:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8734,
                  "src": "11284:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8700,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8699,
                      "name": "IIdentity",
                      "nameLocations": [
                        "11284:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "11284:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "11284:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11194:116:42"
            },
            "returnParameters": {
              "id": 8703,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11320:0:42"
            },
            "scope": 9037,
            "src": "11157:382:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8774,
              "nodeType": "Block",
              "src": "12172:213:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8749,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8742,
                                  "src": "12208:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12200:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8747,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12200:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12200:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8746,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "12190:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12190:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8757,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "12270:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8758,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "12274:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "12270:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8755,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "12259:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8756,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "12263:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "12259:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8759,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12259:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8754,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "12249:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8760,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12249:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12284:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8752,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8742,
                              "src": "12224:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "12235:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "12224:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8762,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12224:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "12190:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12288:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8745,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "12182:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12182:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8766,
                  "nodeType": "ExpressionStatement",
                  "src": "12182:136:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8770,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8737,
                        "src": "12356:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8771,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8739,
                        "src": "12370:7:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8767,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "12328:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12334:21:42",
                      "memberName": "unfreezePartialTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12090,
                      "src": "12328:27:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12328:50:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8773,
                  "nodeType": "ExpressionStatement",
                  "src": "12328:50:42"
                }
              ]
            },
            "documentation": {
              "id": 8735,
              "nodeType": "StructuredDocumentation",
              "src": "11545:487:42",
              "text": "  @dev calls the `unfreezePartialTokens` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-unfreezePartialTokens}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "393694a7",
            "id": 8775,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callUnfreezePartialTokens",
            "nameLocation": "12046:25:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8743,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8737,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "12089:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8775,
                  "src": "12081:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12081:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8739,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "12119:7:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8775,
                  "src": "12111:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8738,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12111:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8742,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "12146:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8775,
                  "src": "12136:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8741,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8740,
                      "name": "IIdentity",
                      "nameLocations": [
                        "12136:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "12136:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "12136:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12071:91:42"
            },
            "returnParameters": {
              "id": 8744,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12172:0:42"
            },
            "scope": 9037,
            "src": "12037:348:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8817,
              "nodeType": "Block",
              "src": "13058:221:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8792,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8785,
                                  "src": "13094:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8791,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13086:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8790,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13086:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8793,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13086:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8789,
                            "name": "isFreezer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9398,
                            "src": "13076:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13076:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8800,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "13156:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8801,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "13160:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "13156:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8798,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "13145:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8799,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "13149:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "13145:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8802,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "13145:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8797,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "13135:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13135:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13170:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8795,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8785,
                              "src": "13110:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13121:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "13110:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13110:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "13076:96:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f5420467265657a6572",
                        "id": 8807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13174:29:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        },
                        "value": "Role: Sender is NOT Freezer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_187bddb73be168cee744f2e5b4d993f5d6a44480e2c0e5c7d37d59c6fcfa1d8b",
                          "typeString": "literal_string \"Role: Sender is NOT Freezer\""
                        }
                      ],
                      "id": 8788,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "13068:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13068:136:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8809,
                  "nodeType": "ExpressionStatement",
                  "src": "13068:136:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8813,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8779,
                        "src": "13247:14:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "id": 8814,
                        "name": "_amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8782,
                        "src": "13263:8:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 8810,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "13214:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13220:26:42",
                      "memberName": "batchUnfreezePartialTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12215,
                      "src": "13214:32:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,uint256[] memory) external"
                      }
                    },
                    "id": 8815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13214:58:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8816,
                  "nodeType": "ExpressionStatement",
                  "src": "13214:58:42"
                }
              ]
            },
            "documentation": {
              "id": 8776,
              "nodeType": "StructuredDocumentation",
              "src": "12391:497:42",
              "text": "  @dev calls the `batchUnfreezePartialTokens` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-batchUnfreezePartialTokens}.\n  Requires that `_onchainID` is set as Freezer on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "0878c410",
            "id": 8818,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callBatchUnfreezePartialTokens",
            "nameLocation": "12902:30:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8779,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "12961:14:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8818,
                  "src": "12942:33:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8777,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "12942:7:42",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8778,
                    "nodeType": "ArrayTypeName",
                    "src": "12942:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8782,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "13004:8:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8818,
                  "src": "12985:27:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8780,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12985:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8781,
                    "nodeType": "ArrayTypeName",
                    "src": "12985:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8785,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "13032:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8818,
                  "src": "13022:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8784,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8783,
                      "name": "IIdentity",
                      "nameLocations": [
                        "13022:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "13022:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "13022:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12932:116:42"
            },
            "returnParameters": {
              "id": 8787,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13058:0:42"
            },
            "scope": 9037,
            "src": "12893:386:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8861,
              "nodeType": "Block",
              "src": "13957:282:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8835,
                                  "name": "_managerOnchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8828,
                                  "src": "14012:17:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14004:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8833,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14004:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8836,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14004:26:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8832,
                            "name": "isRecoveryAgent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9518,
                            "src": "13988:15:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13988:43:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8843,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "14088:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8844,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "14092:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "14088:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8841,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "14077:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "14081:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "14077:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8845,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14077:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8840,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "14067:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14067:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14102:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8838,
                              "name": "_managerOnchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8828,
                              "src": "14035:17:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8839,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14053:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "14035:31:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8848,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14035:69:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "13988:116:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f54205265636f76657279204167656e74",
                        "id": 8850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14118:36:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e32366dd69ce1e711b531fd04f64c1eb5d58a6082cb5c93aceedc9d12e9fbf37",
                          "typeString": "literal_string \"Role: Sender is NOT Recovery Agent\""
                        },
                        "value": "Role: Sender is NOT Recovery Agent"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e32366dd69ce1e711b531fd04f64c1eb5d58a6082cb5c93aceedc9d12e9fbf37",
                          "typeString": "literal_string \"Role: Sender is NOT Recovery Agent\""
                        }
                      ],
                      "id": 8831,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "13967:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13967:197:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8852,
                  "nodeType": "ExpressionStatement",
                  "src": "13967:197:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8856,
                        "name": "_lostWallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8821,
                        "src": "14196:11:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8857,
                        "name": "_newWallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8823,
                        "src": "14209:10:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8858,
                        "name": "_onchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8825,
                        "src": "14221:10:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 8853,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8225,
                        "src": "14174:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IToken_$12234",
                          "typeString": "contract IToken"
                        }
                      },
                      "id": 8855,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14180:15:42",
                      "memberName": "recoveryAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12142,
                      "src": "14174:21:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address,address,address) external returns (bool)"
                      }
                    },
                    "id": 8859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14174:58:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8860,
                  "nodeType": "ExpressionStatement",
                  "src": "14174:58:42"
                }
              ]
            },
            "documentation": {
              "id": 8819,
              "nodeType": "StructuredDocumentation",
              "src": "13285:501:42",
              "text": "  @dev calls the `recoveryAddress` function on the Token contract\n  AgentManager has to be set as agent on the token smart contract to process this function\n  See {IToken-recoveryAddress}.\n  Requires that `_managerOnchainID` is set as RecoveryAgent on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`\n  @param _managerOnchainID the onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "a6a7d4e2",
            "id": 8862,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callRecoveryAddress",
            "nameLocation": "13800:19:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8821,
                  "mutability": "mutable",
                  "name": "_lostWallet",
                  "nameLocation": "13837:11:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8862,
                  "src": "13829:19:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8820,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13829:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8823,
                  "mutability": "mutable",
                  "name": "_newWallet",
                  "nameLocation": "13866:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8862,
                  "src": "13858:18:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8822,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13858:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8825,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "13894:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8862,
                  "src": "13886:18:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8824,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13886:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8828,
                  "mutability": "mutable",
                  "name": "_managerOnchainID",
                  "nameLocation": "13924:17:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8862,
                  "src": "13914:27:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8827,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8826,
                      "name": "IIdentity",
                      "nameLocations": [
                        "13914:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "13914:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "13914:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13819:128:42"
            },
            "returnParameters": {
              "id": 8830,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13957:0:42"
            },
            "scope": 9037,
            "src": "13791:448:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8908,
              "nodeType": "Block",
              "src": "14957:307:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8880,
                                  "name": "_managerOnchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8873,
                                  "src": "15015:17:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8879,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15007:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8878,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15007:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8881,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15007:26:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8877,
                            "name": "isWhiteListManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9638,
                            "src": "14988:18:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14988:46:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8888,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "15091:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8889,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "15095:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "15091:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8886,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "15080:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8887,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "15084:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "15080:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8890,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15080:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8885,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "15070:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8891,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15070:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8892,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15105:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8883,
                              "name": "_managerOnchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8873,
                              "src": "15038:17:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8884,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15056:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "15038:31:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15038:69:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "14988:119:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542057686974654c697374204d616e61676572",
                        "id": 8895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15121:39:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        },
                        "value": "Role: Sender is NOT WhiteList Manager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        }
                      ],
                      "id": 8876,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "14967:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8896,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14967:203:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8897,
                  "nodeType": "ExpressionStatement",
                  "src": "14967:203:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8903,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8865,
                        "src": "15222:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8904,
                        "name": "_onchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8868,
                        "src": "15236:10:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      },
                      {
                        "id": 8905,
                        "name": "_country",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "15248:8:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 8898,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8225,
                            "src": "15180:5:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IToken_$12234",
                              "typeString": "contract IToken"
                            }
                          },
                          "id": 8900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15186:16:42",
                          "memberName": "identityRegistry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12011,
                          "src": "15180:22:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IIdentityRegistry_$6637_$",
                            "typeString": "function () view external returns (contract IIdentityRegistry)"
                          }
                        },
                        "id": 8901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15180:24:42",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                          "typeString": "contract IIdentityRegistry"
                        }
                      },
                      "id": 8902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15205:16:42",
                      "memberName": "registerIdentity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6509,
                      "src": "15180:41:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_contract$_IIdentity_$1743_$_t_uint16_$returns$__$",
                        "typeString": "function (address,contract IIdentity,uint16) external"
                      }
                    },
                    "id": 8906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15180:77:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8907,
                  "nodeType": "ExpressionStatement",
                  "src": "15180:77:42"
                }
              ]
            },
            "documentation": {
              "id": 8863,
              "nodeType": "StructuredDocumentation",
              "src": "14245:540:42",
              "text": "  @dev calls the `registerIdentity` function on the Identity Registry contract\n  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n  See {IIdentityRegistry-registerIdentity}.\n  Requires that `ManagerOnchainID` is set as WhiteListManager on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`\n  @param _managerOnchainID the onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "bea0790a",
            "id": 8909,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callRegisterIdentity",
            "nameLocation": "14799:20:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8874,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8865,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "14837:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8909,
                  "src": "14829:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8864,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14829:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8868,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "14869:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8909,
                  "src": "14859:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8867,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8866,
                      "name": "IIdentity",
                      "nameLocations": [
                        "14859:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "14859:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "14859:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8870,
                  "mutability": "mutable",
                  "name": "_country",
                  "nameLocation": "14896:8:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8909,
                  "src": "14889:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 8869,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "14889:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8873,
                  "mutability": "mutable",
                  "name": "_managerOnchainID",
                  "nameLocation": "14924:17:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8909,
                  "src": "14914:27:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8872,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8871,
                      "name": "IIdentity",
                      "nameLocations": [
                        "14914:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "14914:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "14914:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14819:128:42"
            },
            "returnParameters": {
              "id": 8875,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14957:0:42"
            },
            "scope": 9037,
            "src": "14790:474:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8952,
              "nodeType": "Block",
              "src": "15924:280:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8939,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8925,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8918,
                                  "src": "15982:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8924,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15974:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8923,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15974:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8926,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15974:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8922,
                            "name": "isWhiteListManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9638,
                            "src": "15955:18:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15955:39:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8933,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "16044:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8934,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "16048:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "16044:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8931,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "16033:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8932,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "16037:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "16033:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8935,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16033:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8930,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "16023:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8936,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16023:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8937,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16058:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8928,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8918,
                              "src": "15998:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8929,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16009:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "15998:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15998:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "15955:105:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542057686974654c697374204d616e61676572",
                        "id": 8940,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16074:39:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        },
                        "value": "Role: Sender is NOT WhiteList Manager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        }
                      ],
                      "id": 8921,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "15934:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15934:189:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8942,
                  "nodeType": "ExpressionStatement",
                  "src": "15934:189:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8948,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8912,
                        "src": "16173:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8949,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8915,
                        "src": "16187:9:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 8943,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8225,
                            "src": "16133:5:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IToken_$12234",
                              "typeString": "contract IToken"
                            }
                          },
                          "id": 8945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "16139:16:42",
                          "memberName": "identityRegistry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12011,
                          "src": "16133:22:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IIdentityRegistry_$6637_$",
                            "typeString": "function () view external returns (contract IIdentityRegistry)"
                          }
                        },
                        "id": 8946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16133:24:42",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                          "typeString": "contract IIdentityRegistry"
                        }
                      },
                      "id": 8947,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16158:14:42",
                      "memberName": "updateIdentity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6550,
                      "src": "16133:39:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_contract$_IIdentity_$1743_$returns$__$",
                        "typeString": "function (address,contract IIdentity) external"
                      }
                    },
                    "id": 8950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16133:64:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8951,
                  "nodeType": "ExpressionStatement",
                  "src": "16133:64:42"
                }
              ]
            },
            "documentation": {
              "id": 8910,
              "nodeType": "StructuredDocumentation",
              "src": "15270:517:42",
              "text": "  @dev calls the `updateIdentity` function on the Identity Registry contract\n  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n  See {IIdentityRegistry-updateIdentity}.\n  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "d5451e52",
            "id": 8953,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callUpdateIdentity",
            "nameLocation": "15801:18:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8919,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8912,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "15837:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8953,
                  "src": "15829:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8911,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15829:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8915,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nameLocation": "15869:9:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8953,
                  "src": "15859:19:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8914,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8913,
                      "name": "IIdentity",
                      "nameLocations": [
                        "15859:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "15859:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "15859:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8918,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "15898:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8953,
                  "src": "15888:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8917,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8916,
                      "name": "IIdentity",
                      "nameLocations": [
                        "15888:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "15888:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "15888:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15819:95:42"
            },
            "returnParameters": {
              "id": 8920,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15924:0:42"
            },
            "scope": 9037,
            "src": "15792:412:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8995,
              "nodeType": "Block",
              "src": "16857:278:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8982,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8968,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8961,
                                  "src": "16915:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 8967,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "16907:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8966,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "16907:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8969,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16907:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8965,
                            "name": "isWhiteListManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9638,
                            "src": "16888:18:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 8970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16888:39:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 8976,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "16977:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 8977,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "16981:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "16977:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 8974,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "16966:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 8975,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "16970:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "16966:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 8978,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16966:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 8973,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "16956:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 8979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16956:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 8980,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16991:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 8971,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8961,
                              "src": "16931:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 8972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16942:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "16931:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 8981,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16931:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "16888:105:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542057686974654c697374204d616e61676572",
                        "id": 8983,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17007:39:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        },
                        "value": "Role: Sender is NOT WhiteList Manager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        }
                      ],
                      "id": 8964,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "16867:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16867:189:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8985,
                  "nodeType": "ExpressionStatement",
                  "src": "16867:189:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8991,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8956,
                        "src": "17105:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8992,
                        "name": "_country",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17119:8:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 8986,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8225,
                            "src": "17066:5:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IToken_$12234",
                              "typeString": "contract IToken"
                            }
                          },
                          "id": 8988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "17072:16:42",
                          "memberName": "identityRegistry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12011,
                          "src": "17066:22:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IIdentityRegistry_$6637_$",
                            "typeString": "function () view external returns (contract IIdentityRegistry)"
                          }
                        },
                        "id": 8989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17066:24:42",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                          "typeString": "contract IIdentityRegistry"
                        }
                      },
                      "id": 8990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17091:13:42",
                      "memberName": "updateCountry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6541,
                      "src": "17066:38:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint16_$returns$__$",
                        "typeString": "function (address,uint16) external"
                      }
                    },
                    "id": 8993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17066:62:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8994,
                  "nodeType": "ExpressionStatement",
                  "src": "17066:62:42"
                }
              ]
            },
            "documentation": {
              "id": 8954,
              "nodeType": "StructuredDocumentation",
              "src": "16210:515:42",
              "text": "  @dev calls the `updateCountry` function on the Identity Registry contract\n  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n  See {IIdentityRegistry-updateCountry}.\n  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "2228a6cf",
            "id": 8996,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callUpdateCountry",
            "nameLocation": "16739:17:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8956,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "16774:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8996,
                  "src": "16766:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8955,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16766:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8958,
                  "mutability": "mutable",
                  "name": "_country",
                  "nameLocation": "16803:8:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8996,
                  "src": "16796:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 8957,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "16796:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8961,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "16831:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 8996,
                  "src": "16821:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 8960,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8959,
                      "name": "IIdentity",
                      "nameLocations": [
                        "16821:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "16821:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "16821:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16756:91:42"
            },
            "returnParameters": {
              "id": 8963,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16857:0:42"
            },
            "scope": 9037,
            "src": "16730:405:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9035,
              "nodeType": "Block",
              "src": "17744:269:42",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9023,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9009,
                                  "name": "_onchainID",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9002,
                                  "src": "17802:10:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                                    "typeString": "contract IIdentity"
                                  }
                                ],
                                "id": 9008,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "17794:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9007,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "17794:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 9010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17794:19:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9006,
                            "name": "isWhiteListManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9638,
                            "src": "17775:18:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 9011,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17775:39:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 9017,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967281,
                                        "src": "17864:3:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 9018,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "17868:6:42",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "17864:10:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 9015,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967295,
                                      "src": "17853:3:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 9016,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "17857:6:42",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "17853:10:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 9019,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "17853:22:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 9014,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967288,
                                "src": "17843:9:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 9020,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17843:33:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "hexValue": "32",
                              "id": 9021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17878:1:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "expression": {
                              "id": 9012,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9002,
                              "src": "17818:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            "id": 9013,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "17829:13:42",
                            "memberName": "keyHasPurpose",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1598,
                            "src": "17818:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint256) view external returns (bool)"
                            }
                          },
                          "id": 9022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17818:62:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "17775:105:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542057686974654c697374204d616e61676572",
                        "id": 9024,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17894:39:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        },
                        "value": "Role: Sender is NOT WhiteList Manager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f684e31ce8ac60225c2dc064128ad37cf268a0a54e2be5449f65c4937ecd5cd1",
                          "typeString": "literal_string \"Role: Sender is NOT WhiteList Manager\""
                        }
                      ],
                      "id": 9005,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "17754:7:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17754:189:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9026,
                  "nodeType": "ExpressionStatement",
                  "src": "17754:189:42"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9032,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8999,
                        "src": "17993:12:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 9027,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8225,
                            "src": "17953:5:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IToken_$12234",
                              "typeString": "contract IToken"
                            }
                          },
                          "id": 9029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "17959:16:42",
                          "memberName": "identityRegistry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12011,
                          "src": "17953:22:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IIdentityRegistry_$6637_$",
                            "typeString": "function () view external returns (contract IIdentityRegistry)"
                          }
                        },
                        "id": 9030,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17953:24:42",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                          "typeString": "contract IIdentityRegistry"
                        }
                      },
                      "id": 9031,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17978:14:42",
                      "memberName": "deleteIdentity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6515,
                      "src": "17953:39:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 9033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17953:53:42",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9034,
                  "nodeType": "ExpressionStatement",
                  "src": "17953:53:42"
                }
              ]
            },
            "documentation": {
              "id": 8997,
              "nodeType": "StructuredDocumentation",
              "src": "17141:517:42",
              "text": "  @dev calls the `deleteIdentity` function on the Identity Registry contract\n  AgentManager has to be set as agent on the Identity Registry smart contract to process this function\n  See {IIdentityRegistry-deleteIdentity}.\n  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract\n  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`\n  @param _onchainID the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
            },
            "functionSelector": "aca277e1",
            "id": 9036,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callDeleteIdentity",
            "nameLocation": "17672:18:42",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8999,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "17699:12:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 9036,
                  "src": "17691:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8998,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17691:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9002,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "17723:10:42",
                  "nodeType": "VariableDeclaration",
                  "scope": 9036,
                  "src": "17713:20:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 9001,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 9000,
                      "name": "IIdentity",
                      "nameLocations": [
                        "17713:9:42"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "17713:9:42"
                    },
                    "referencedDeclaration": 1743,
                    "src": "17713:9:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17690:44:42"
            },
            "returnParameters": {
              "id": 9004,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17744:0:42"
            },
            "scope": 9037,
            "src": "17663:350:42",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 9038,
        "src": "1286:16729:42",
        "usedErrors": []
      }
    ],
    "src": "1093:16923:42"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.384Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "callBatchBurn(address[],uint256[],address)": {
        "details": "calls the `batchBurn` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchBurn}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callBatchForcedTransfer(address[],address[],uint256[],address)": {
        "details": "calls the `batchForcedTransfer` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchForcedTransfer}.  Requires that `_onchainID` is set as TransferManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callBatchFreezePartialTokens(address[],uint256[],address)": {
        "details": "calls the `batchFreezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchFreezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callBatchMint(address[],uint256[],address)": {
        "details": "calls the `batchMint` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchMint}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callBatchSetAddressFrozen(address[],bool[],address)": {
        "details": "calls the `batchSetAddressFrozen` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchSetAddressFrozen}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callBatchUnfreezePartialTokens(address[],uint256[],address)": {
        "details": "calls the `batchUnfreezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-batchUnfreezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callBurn(address,uint256,address)": {
        "details": "calls the `burn` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-burn}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callDeleteIdentity(address,address)": {
        "details": "calls the `deleteIdentity` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-deleteIdentity}.  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callForcedTransfer(address,address,uint256,address)": {
        "details": "calls the `forcedTransfer` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-forcedTransfer}.  Requires that `_onchainID` is set as TransferManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callFreezePartialTokens(address,uint256,address)": {
        "details": "calls the `freezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-freezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callMint(address,uint256,address)": {
        "details": "calls the `mint` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-mint}.  Requires that `_onchainID` is set as SupplyModifier on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callPause(address)": {
        "details": "calls the `pause` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-pause}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callRecoveryAddress(address,address,address,address)": {
        "details": "calls the `recoveryAddress` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-recoveryAddress}.  Requires that `_managerOnchainID` is set as RecoveryAgent on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`",
        "params": {
          "_managerOnchainID": "the onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callRegisterIdentity(address,address,uint16,address)": {
        "details": "calls the `registerIdentity` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-registerIdentity}.  Requires that `ManagerOnchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_managerOnchainID`",
        "params": {
          "_managerOnchainID": "the onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callSetAddressFrozen(address,bool,address)": {
        "details": "calls the `setAddressFrozen` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-setAddressFrozen}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callUnfreezePartialTokens(address,uint256,address)": {
        "details": "calls the `unfreezePartialTokens` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-unfreezePartialTokens}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callUnpause(address)": {
        "details": "calls the `unpause` function on the Token contract  AgentManager has to be set as agent on the token smart contract to process this function  See {IToken-unpause}.  Requires that `_onchainID` is set as Freezer on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callUpdateCountry(address,uint16,address)": {
        "details": "calls the `updateCountry` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-updateCountry}.  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "callUpdateIdentity(address,address,address)": {
        "details": "calls the `updateIdentity` function on the Identity Registry contract  AgentManager has to be set as agent on the Identity Registry smart contract to process this function  See {IIdentityRegistry-updateIdentity}.  Requires that `_onchainID` is set as WhiteListManager on the AgentManager contract  Requires that msg.sender is a MANAGEMENT KEY on `_onchainID`",
        "params": {
          "_onchainID": "the _onchainID contract of the caller, e.g. \"i call this function and i am Bob\""
        }
      },
      "isAgentAdmin(address)": {
        "details": "AgentAdmin Role _agentAdmin"
      },
      "isComplianceAgent(address)": {
        "details": "ComplianceAgent Role _complianceAgents"
      },
      "isFreezer(address)": {
        "details": "Freezer Role _freezers"
      },
      "isRecoveryAgent(address)": {
        "details": "RecoveryAgent Role _recoveryAgents"
      },
      "isSupplyModifier(address)": {
        "details": "SupplyModifier Role _supplyModifiers"
      },
      "isTransferManager(address)": {
        "details": "TransferManager Role _transferManagers"
      },
      "isWhiteListManager(address)": {
        "details": "WhiteListManager Role _whiteListManagers"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "stateVariables": {
      "token": {
        "details": "the token managed by this AgentManager contract"
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}