{
  "contractName": "TwapOracle",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IUniswapV3Factory",
          "name": "_uniswapFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_weth",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidPrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidTimeWindow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PairNotSupported",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "T",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UniswapPoolAvailable",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint24",
          "name": "feeTier",
          "type": "uint24"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "timeWindow",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "PoolSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "PriceSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNISWAP_V3_FACTORY",
      "outputs": [
        {
          "internalType": "contract IUniswapV3Factory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WETH",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getRoleMemberIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pools",
      "outputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "timeWindow",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "prices",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "quoteToken",
          "type": "address"
        }
      ],
      "name": "getPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "quotePrice",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "feeTier",
          "type": "uint24"
        },
        {
          "internalType": "uint32",
          "name": "timeWindow",
          "type": "uint32"
        }
      ],
      "name": "setPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "setPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IUniswapV3Factory\",\"name\":\"_uniswapFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTimeWindow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PairNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"T\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UniswapPoolAvailable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"feeTier\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"timeWindow\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"PriceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNISWAP_V3_FACTORY\",\"outputs\":[{\"internalType\":\"contract IUniswapV3Factory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"quotePrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getRoleMemberIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pools\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timeWindow\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"prices\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"feeTier\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"timeWindow\",\"type\":\"uint32\"}],\"name\":\"setPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getRoleMemberIndex(bytes32,address)\":{\"details\":\"Returns the index of the account that have `role`.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/fee/dynamic/TwapOracle.sol\":\"TwapOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol\":{\"keccak256\":\"0xcc3d0c93fc9ac0febbe09f941b465b57f750bcf3b48432da0b97dc289cfdc489\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b9379ad954680c44a0bc523b314ae4c4da735f9fe1d02aa56ea5bdba6f1136f2\",\"dweb:/ipfs/QmZXdgQNXKAckrXWz9R3mc47F1fvDvr28a2ewJrwNAw71B\"]},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5\",\"dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f\",\"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg\"]},\"project:/contracts/handlers/fee/dynamic/TwapOracle.sol\":{\"keccak256\":\"0xe16de3bdbdc119b418a45ce607fc5cd8c586243adca59f83920f2b5218c5db3e\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://480664d5c3f8c1f8fc0d5c169269474e3c6fa339cd441c0c1c172e06560f65b4\",\"dweb:/ipfs/QmUeekvVXLcyZcpXwQQA5C7en7Nz5qLY2eF7Vq4avW5Vdd\"]},\"project:/contracts/utils/AccessControl.sol\":{\"keccak256\":\"0x46ee81e56b1cca67473670a3f59fb02ec8abda297fac02c79d705a3442588499\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40869a99895bc5f746f8b55ab7d20eb4fce323e50540d2d0944e1930f5eea334\",\"dweb:/ipfs/QmVaCmqGRywSFyqPj1auXmDYQzDFy4uywknXTB3QMLCzkm\"]},\"project:/contracts/utils/FullMath.sol\":{\"keccak256\":\"0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125\",\"dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd\"]},\"project:/contracts/utils/TickMath.sol\":{\"keccak256\":\"0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c\",\"dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS\"]}},\"version\":1}",
  "bytecode": "0x60c06040523480156200001157600080fd5b50604051620017bd380380620017bd83398101604081905262000034916200015e565b6001600160a01b03808316608052811660a052620000546000336200005c565b50506200019d565b6200006882826200006c565b5050565b6000828152602081815260409091206200009191839062000a60620000d3821b17901c565b15620000685760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000620000ea836001600160a01b038416620000f3565b90505b92915050565b60008181526001830160205260408120546200013c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620000ed565b506000620000ed565b6001600160a01b03811681146200015b57600080fd5b50565b600080604083850312156200017257600080fd5b82516200017f8162000145565b6020840151909250620001928162000145565b809150509250929050565b60805160a0516115de620001df60003960008181610265015281816103ac0152818161085701526108ec0152600081816102d201526103ea01526115de6000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c806391d1485411610097578063ca15c87311610066578063ca15c87314610287578063cfed246b1461029a578063d547741f146102ba578063f73e5aab146102cd57600080fd5b806391d14854146101d9578063a217fddf146101fc578063a4063dbc14610204578063ad5c46481461026057600080fd5b806336568abe116100d357806336568abe1461017557806341976e09146101885780634e0df3f61461019b5780639010d07c146101ae57600080fd5b8062e4768b1461010457806320f383db14610119578063248a9ca31461012c5780632f2ff15d14610162575b600080fd5b610117610112366004611124565b6102f4565b005b610117610127366004611150565b610369565b61014f61013a3660046111ac565b60009081526020819052604090206002015490565b6040519081526020015b60405180910390f35b6101176101703660046111c5565b610518565b6101176101833660046111c5565b6105ab565b61014f6101963660046111f5565b610625565b61014f6101a93660046111c5565b610966565b6101c16101bc366004611212565b610991565b6040516001600160a01b039091168152602001610159565b6101ec6101e73660046111c5565b6109b0565b6040519015158152602001610159565b61014f600081565b61023c6102123660046111f5565b6001602052600090815260409020546001600160a01b03811690600160a01b900463ffffffff1682565b604080516001600160a01b03909316835263ffffffff909116602083015201610159565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61014f6102953660046111ac565b6109c8565b61014f6102a83660046111f5565b60026020526000908152604090205481565b6101176102c83660046111c5565b6109df565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6102fc610a75565b6001600160a01b0382166000818152600260209081526040808320859055600182529182902080546001600160c01b0319169055815192835282018390527ff9a09e2869a1f88523f00504328d7965866201bafe501573db2e114e3375a086910160405180910390a15050565b610371610a75565b63ffffffff81166103955760405163b11cd48160e01b815260040160405180910390fd5b604051630b4c774160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152848116602483015262ffffff841660448301526000917f000000000000000000000000000000000000000000000000000000000000000090911690631698ee8290606401602060405180830381865afa158015610433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104579190611234565b90506001600160a01b0381163b610481576040516365db466f60e01b815260040160405180910390fd5b6001600160a01b0384811660008181526001602090815260409182902080549486166001600160c01b03199095168517600160a01b63ffffffff891690810291909117909155825193845262ffffff8816918401919091529082015260608101919091527f5ca3de5b348a6ab6284a94ed584fdde449164bdae6a8b034aaf7594706e349169060800160405180910390a150505050565b60008281526020819052604090206002015461053490336109b0565b61059d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084015b60405180910390fd5b6105a78282610ace565b5050565b6001600160a01b038116331461061b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610594565b6105a78282610b27565b6001600160a01b038181166000908152600160209081526040808320815180830190925254938416808252600160a01b90940463ffffffff169181019190915290916106885750506001600160a01b031660009081526002602052604090205490565b60208101516040805160028082526060820190925260009181602001602082028036833701905050905081816000815181106106c6576106c6611267565b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106106f5576106f5611267565b63ffffffff90921660209283029190910190910152825160405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd9061073a90859060040161127d565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261077f9190810190611390565b50905060008160008151811061079757610797611267565b6020026020010151826001815181106107b2576107b2611267565b60200260200101516107c49190611472565b905060006107d863ffffffff8616836114d8565b905060008260060b1280156107fe57506107f863ffffffff861683611516565b60060b15155b15610811578061080d81611538565b9150505b600061081c82610b80565b90506fffffffffffffffffffffffffffffffff6001600160a01b038216116108c95760006108536001600160a01b0383168061155c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b0316106108aa576108a5600160c01b670de0b6b3a764000083610ea0565b6108c1565b6108c181670de0b6b3a7640000600160c01b610ea0565b98505061095a565b60006108e86001600160a01b0383168068010000000000000000610ea0565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b03161061093f5761093a600160801b670de0b6b3a764000083610ea0565b610956565b61095681670de0b6b3a7640000600160801b610ea0565b9850505b50505050505050919050565b6000828152602081815260408083206001600160a01b03851684526001019091529020545b92915050565b60008281526020819052604081206109a99083610f53565b9392505050565b60008281526020819052604081206109a99083610f5f565b600081815260208190526040812061098b90610f81565b6000828152602081905260409020600201546109fb90336109b0565b61061b5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610594565b60006109a9836001600160a01b038416610f8b565b610a806000336109b0565b610acc5760405162461bcd60e51b815260206004820152601e60248201527f73656e64657220646f65736e277420686176652061646d696e20726f6c6500006044820152606401610594565b565b6000828152602081905260409020610ae69082610a60565b156105a75760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000828152602081905260409020610b3f9082610fda565b156105a75760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b60008060008360020b12610b97578260020b610b9f565b8260020b6000035b9050620d89e8811115610bc5576040516315e4079d60e11b815260040160405180910390fd5b600060018216610bd957600160801b610beb565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615610c1f576ffff97272373d413259a46990580e213a0260801c5b6004821615610c3e576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615610c5d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615610c7c576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615610c9b576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615610cba576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615610cd9576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615610cf9576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615610d19576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615610d39576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615610d59576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615610d79576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615610d99576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615610db9576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615610dd9576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615610dfa576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615610e1a576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615610e39576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615610e56576b048a170391f7dc42444e8fa20260801c5b60008460020b1315610e77578060001981610e7357610e736114c2565b0490505b640100000000810615610e8b576001610e8e565b60005b60ff16602082901c0192505050919050565b600080806000198587098587029250828110838203039150508060001415610eda5760008411610ecf57600080fd5b5082900490506109a9565b808411610ee657600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60006109a98383610fef565b6001600160a01b038116600090815260018301602052604081205415156109a9565b600061098b825490565b6000818152600183016020526040812054610fd25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561098b565b50600061098b565b60006109a9836001600160a01b038416611019565b600082600001828154811061100657611006611267565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561110257600061103d60018361157b565b85549091506000906110519060019061157b565b90508181146110b657600086600001828154811061107157611071611267565b906000526020600020015490508087600001848154811061109457611094611267565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806110c7576110c7611592565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061098b565b600091505061098b565b6001600160a01b038116811461112157600080fd5b50565b6000806040838503121561113757600080fd5b82356111428161110c565b946020939093013593505050565b60008060006060848603121561116557600080fd5b83356111708161110c565b9250602084013562ffffff8116811461118857600080fd5b9150604084013563ffffffff811681146111a157600080fd5b809150509250925092565b6000602082840312156111be57600080fd5b5035919050565b600080604083850312156111d857600080fd5b8235915060208301356111ea8161110c565b809150509250929050565b60006020828403121561120757600080fd5b81356109a98161110c565b6000806040838503121561122557600080fd5b50508035926020909101359150565b60006020828403121561124657600080fd5b81516109a98161110c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156112bb57835163ffffffff1683529284019291840191600101611299565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156112f0576112f0611251565b604052919050565b600067ffffffffffffffff82111561131257611312611251565b5060051b60200190565b600082601f83011261132d57600080fd5b8151602061134261133d836112f8565b6112c7565b82815260059290921b8401810191818101908684111561136157600080fd5b8286015b848110156113855780516113788161110c565b8352918301918301611365565b509695505050505050565b600080604083850312156113a357600080fd5b825167ffffffffffffffff808211156113bb57600080fd5b818501915085601f8301126113cf57600080fd5b815160206113df61133d836112f8565b82815260059290921b840181019181810190898411156113fe57600080fd5b948201945b8386101561142c5785518060060b811461141d5760008081fd5b82529482019490820190611403565b9188015191965090935050508082111561144557600080fd5b506114528582860161131c565b9150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008160060b8360060b6000811281667fffffffffffff190183128115161561149d5761149d61145c565b81667fffffffffffff0183138116156114b8576114b861145c565b5090039392505050565b634e487b7160e01b600052601260045260246000fd5b60008160060b8360060b806114ef576114ef6114c2565b667fffffffffffff1982146000198214161561150d5761150d61145c565b90059392505050565b60008260060b80611529576115296114c2565b808360060b0791505092915050565b60008160020b627fffff198114156115525761155261145c565b6000190192915050565b60008160001904831182151516156115765761157661145c565b500290565b60008282101561158d5761158d61145c565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b628ba1a27ea4b93f51505ae4f8450e4f1933f572e9785a39c94c1f079b2463f64736f6c634300080b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c806391d1485411610097578063ca15c87311610066578063ca15c87314610287578063cfed246b1461029a578063d547741f146102ba578063f73e5aab146102cd57600080fd5b806391d14854146101d9578063a217fddf146101fc578063a4063dbc14610204578063ad5c46481461026057600080fd5b806336568abe116100d357806336568abe1461017557806341976e09146101885780634e0df3f61461019b5780639010d07c146101ae57600080fd5b8062e4768b1461010457806320f383db14610119578063248a9ca31461012c5780632f2ff15d14610162575b600080fd5b610117610112366004611124565b6102f4565b005b610117610127366004611150565b610369565b61014f61013a3660046111ac565b60009081526020819052604090206002015490565b6040519081526020015b60405180910390f35b6101176101703660046111c5565b610518565b6101176101833660046111c5565b6105ab565b61014f6101963660046111f5565b610625565b61014f6101a93660046111c5565b610966565b6101c16101bc366004611212565b610991565b6040516001600160a01b039091168152602001610159565b6101ec6101e73660046111c5565b6109b0565b6040519015158152602001610159565b61014f600081565b61023c6102123660046111f5565b6001602052600090815260409020546001600160a01b03811690600160a01b900463ffffffff1682565b604080516001600160a01b03909316835263ffffffff909116602083015201610159565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61014f6102953660046111ac565b6109c8565b61014f6102a83660046111f5565b60026020526000908152604090205481565b6101176102c83660046111c5565b6109df565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6102fc610a75565b6001600160a01b0382166000818152600260209081526040808320859055600182529182902080546001600160c01b0319169055815192835282018390527ff9a09e2869a1f88523f00504328d7965866201bafe501573db2e114e3375a086910160405180910390a15050565b610371610a75565b63ffffffff81166103955760405163b11cd48160e01b815260040160405180910390fd5b604051630b4c774160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152848116602483015262ffffff841660448301526000917f000000000000000000000000000000000000000000000000000000000000000090911690631698ee8290606401602060405180830381865afa158015610433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104579190611234565b90506001600160a01b0381163b610481576040516365db466f60e01b815260040160405180910390fd5b6001600160a01b0384811660008181526001602090815260409182902080549486166001600160c01b03199095168517600160a01b63ffffffff891690810291909117909155825193845262ffffff8816918401919091529082015260608101919091527f5ca3de5b348a6ab6284a94ed584fdde449164bdae6a8b034aaf7594706e349169060800160405180910390a150505050565b60008281526020819052604090206002015461053490336109b0565b61059d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084015b60405180910390fd5b6105a78282610ace565b5050565b6001600160a01b038116331461061b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610594565b6105a78282610b27565b6001600160a01b038181166000908152600160209081526040808320815180830190925254938416808252600160a01b90940463ffffffff169181019190915290916106885750506001600160a01b031660009081526002602052604090205490565b60208101516040805160028082526060820190925260009181602001602082028036833701905050905081816000815181106106c6576106c6611267565b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106106f5576106f5611267565b63ffffffff90921660209283029190910190910152825160405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd9061073a90859060040161127d565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261077f9190810190611390565b50905060008160008151811061079757610797611267565b6020026020010151826001815181106107b2576107b2611267565b60200260200101516107c49190611472565b905060006107d863ffffffff8616836114d8565b905060008260060b1280156107fe57506107f863ffffffff861683611516565b60060b15155b15610811578061080d81611538565b9150505b600061081c82610b80565b90506fffffffffffffffffffffffffffffffff6001600160a01b038216116108c95760006108536001600160a01b0383168061155c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b0316106108aa576108a5600160c01b670de0b6b3a764000083610ea0565b6108c1565b6108c181670de0b6b3a7640000600160c01b610ea0565b98505061095a565b60006108e86001600160a01b0383168068010000000000000000610ea0565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b03161061093f5761093a600160801b670de0b6b3a764000083610ea0565b610956565b61095681670de0b6b3a7640000600160801b610ea0565b9850505b50505050505050919050565b6000828152602081815260408083206001600160a01b03851684526001019091529020545b92915050565b60008281526020819052604081206109a99083610f53565b9392505050565b60008281526020819052604081206109a99083610f5f565b600081815260208190526040812061098b90610f81565b6000828152602081905260409020600201546109fb90336109b0565b61061b5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610594565b60006109a9836001600160a01b038416610f8b565b610a806000336109b0565b610acc5760405162461bcd60e51b815260206004820152601e60248201527f73656e64657220646f65736e277420686176652061646d696e20726f6c6500006044820152606401610594565b565b6000828152602081905260409020610ae69082610a60565b156105a75760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000828152602081905260409020610b3f9082610fda565b156105a75760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b60008060008360020b12610b97578260020b610b9f565b8260020b6000035b9050620d89e8811115610bc5576040516315e4079d60e11b815260040160405180910390fd5b600060018216610bd957600160801b610beb565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615610c1f576ffff97272373d413259a46990580e213a0260801c5b6004821615610c3e576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615610c5d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615610c7c576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615610c9b576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615610cba576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615610cd9576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615610cf9576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615610d19576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615610d39576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615610d59576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615610d79576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615610d99576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615610db9576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615610dd9576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615610dfa576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615610e1a576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615610e39576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615610e56576b048a170391f7dc42444e8fa20260801c5b60008460020b1315610e77578060001981610e7357610e736114c2565b0490505b640100000000810615610e8b576001610e8e565b60005b60ff16602082901c0192505050919050565b600080806000198587098587029250828110838203039150508060001415610eda5760008411610ecf57600080fd5b5082900490506109a9565b808411610ee657600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60006109a98383610fef565b6001600160a01b038116600090815260018301602052604081205415156109a9565b600061098b825490565b6000818152600183016020526040812054610fd25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561098b565b50600061098b565b60006109a9836001600160a01b038416611019565b600082600001828154811061100657611006611267565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561110257600061103d60018361157b565b85549091506000906110519060019061157b565b90508181146110b657600086600001828154811061107157611071611267565b906000526020600020015490508087600001848154811061109457611094611267565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806110c7576110c7611592565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061098b565b600091505061098b565b6001600160a01b038116811461112157600080fd5b50565b6000806040838503121561113757600080fd5b82356111428161110c565b946020939093013593505050565b60008060006060848603121561116557600080fd5b83356111708161110c565b9250602084013562ffffff8116811461118857600080fd5b9150604084013563ffffffff811681146111a157600080fd5b809150509250925092565b6000602082840312156111be57600080fd5b5035919050565b600080604083850312156111d857600080fd5b8235915060208301356111ea8161110c565b809150509250929050565b60006020828403121561120757600080fd5b81356109a98161110c565b6000806040838503121561122557600080fd5b50508035926020909101359150565b60006020828403121561124657600080fd5b81516109a98161110c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156112bb57835163ffffffff1683529284019291840191600101611299565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156112f0576112f0611251565b604052919050565b600067ffffffffffffffff82111561131257611312611251565b5060051b60200190565b600082601f83011261132d57600080fd5b8151602061134261133d836112f8565b6112c7565b82815260059290921b8401810191818101908684111561136157600080fd5b8286015b848110156113855780516113788161110c565b8352918301918301611365565b509695505050505050565b600080604083850312156113a357600080fd5b825167ffffffffffffffff808211156113bb57600080fd5b818501915085601f8301126113cf57600080fd5b815160206113df61133d836112f8565b82815260059290921b840181019181810190898411156113fe57600080fd5b948201945b8386101561142c5785518060060b811461141d5760008081fd5b82529482019490820190611403565b9188015191965090935050508082111561144557600080fd5b506114528582860161131c565b9150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008160060b8360060b6000811281667fffffffffffff190183128115161561149d5761149d61145c565b81667fffffffffffff0183138116156114b8576114b861145c565b5090039392505050565b634e487b7160e01b600052601260045260246000fd5b60008160060b8360060b806114ef576114ef6114c2565b667fffffffffffff1982146000198214161561150d5761150d61145c565b90059392505050565b60008260060b80611529576115296114c2565b808360060b0791505092915050565b60008160020b627fffff198114156115525761155261145c565b6000190192915050565b60008160001904831182151516156115765761157661145c565b500290565b60008282101561158d5761158d61145c565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b628ba1a27ea4b93f51505ae4f8450e4f1933f572e9785a39c94c1f079b2463f64736f6c634300080b0033",
  "immutableReferences": {
    "17713": [
      {
        "length": 32,
        "start": 722
      },
      {
        "length": 32,
        "start": 1002
      }
    ],
    "17715": [
      {
        "length": 32,
        "start": 613
      },
      {
        "length": 32,
        "start": 940
      },
      {
        "length": 32,
        "start": 2135
      },
      {
        "length": 32,
        "start": 2284
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:620:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "78:86:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "142:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "151:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "154:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "144:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "144:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "144:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "101:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "112:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "127:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "132:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "123:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "123:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "136:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "119:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "119:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "108:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "108:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "98:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "98:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "91:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "91:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "88:70:105"
                }
              ]
            },
            "name": "validator_revert_contract_IUniswapV3Factory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "67:5:105",
                "type": ""
              }
            ],
            "src": "14:150:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "293:325:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "339:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "348:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "351:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "341:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "341:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "341:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "314:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "323:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "310:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "310:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "335:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "306:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "306:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "303:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "364:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "383:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "377:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "377:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "368:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "446:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_contract_IUniswapV3Factory",
                      "nodeType": "YulIdentifier",
                      "src": "402:43:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "402:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "402:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "461:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "471:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "461:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "485:40:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "510:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "521:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "506:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "506:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "500:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "500:25:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "489:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "578:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_contract_IUniswapV3Factory",
                      "nodeType": "YulIdentifier",
                      "src": "534:43:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "534:52:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "534:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "595:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "605:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "595:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_contract$_IUniswapV3Factory_$7456t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "251:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "262:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "274:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "282:6:105",
                "type": ""
              }
            ],
            "src": "169:449:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function validator_revert_contract_IUniswapV3Factory(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IUniswapV3Factory_$7456t_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IUniswapV3Factory(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_contract_IUniswapV3Factory(value_1)\n        value1 := value_1\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:11526:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:86:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "123:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "132:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "135:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "125:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "125:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "125:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "82:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "93:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "108:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "113:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "104:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "104:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "117:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "100:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "89:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "89:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "79:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "79:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "72:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "72:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "69:70:105"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:105",
                "type": ""
              }
            ],
            "src": "14:131:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "237:228:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "283:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "292:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "295:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "285:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "285:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "285:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "258:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "267:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "254:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "254:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "279:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "250:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "250:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "247:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "308:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "334:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "321:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "321:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "312:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "378:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "353:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "353:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "353:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "393:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "403:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "393:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "417:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "444:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "455:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "440:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "440:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "427:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "427:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "417:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "195:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "206:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "218:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "226:6:105",
                "type": ""
              }
            ],
            "src": "150:315:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "572:487:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "618:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "627:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "630:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "620:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "620:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "620:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "593:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "602:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "589:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "589:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "614:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "585:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "585:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "582:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "643:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "669:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "656:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "656:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "647:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "713:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "688:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "688:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "688:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "728:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "738:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "728:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "752:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "784:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "795:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "780:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "780:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "767:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "767:32:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "756:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "855:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "864:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "867:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "857:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "857:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "857:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value_1",
                            "nodeType": "YulIdentifier",
                            "src": "821:7:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "834:7:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "843:8:105",
                                "type": "",
                                "value": "0xffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "830:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "830:22:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "818:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "818:35:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "811:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "811:43:105"
                  },
                  "nodeType": "YulIf",
                  "src": "808:63:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "880:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "890:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "880:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "906:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "938:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "949:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "934:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "934:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "921:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "921:32:105"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "910:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1011:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1020:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1023:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1013:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1013:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1013:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value_2",
                            "nodeType": "YulIdentifier",
                            "src": "975:7:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "988:7:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "997:10:105",
                                "type": "",
                                "value": "0xffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "984:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "984:24:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "972:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "972:37:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "965:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "965:45:105"
                  },
                  "nodeType": "YulIf",
                  "src": "962:65:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1036:17:105",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "1046:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1036:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint24t_uint32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "522:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "533:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "545:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "553:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "561:6:105",
                "type": ""
              }
            ],
            "src": "470:589:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1134:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1180:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1189:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1192:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1182:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1182:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1182:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1155:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1164:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1151:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1151:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1176:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1147:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1147:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1144:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1205:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1228:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1215:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1215:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1205:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1100:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1111:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1123:6:105",
                "type": ""
              }
            ],
            "src": "1064:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1350:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1360:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1372:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1383:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1368:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1368:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1360:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1402:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1413:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1395:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1395:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1395:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1319:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1330:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1341:4:105",
                "type": ""
              }
            ],
            "src": "1249:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1518:228:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1564:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1573:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1576:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1566:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1566:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1566:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1539:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1548:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1535:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1535:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1560:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1531:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1531:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1528:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1589:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1612:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1599:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1599:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1589:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1631:45:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1661:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1672:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1657:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1657:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1644:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1644:32:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1635:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1710:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1685:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1685:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1685:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1725:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1735:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1725:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1476:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1487:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1499:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1507:6:105",
                "type": ""
              }
            ],
            "src": "1431:315:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1821:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1867:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1876:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1879:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1869:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1869:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1869:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1842:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1851:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1838:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1838:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1863:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1834:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1834:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1831:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1892:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1918:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1905:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1905:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1896:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1962:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1937:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1937:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1937:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1977:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1987:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1977:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1787:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1798:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1810:6:105",
                "type": ""
              }
            ],
            "src": "1751:247:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2104:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2114:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2126:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2137:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2122:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2122:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2114:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2156:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2167:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2149:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2149:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2149:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2073:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2084:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2095:4:105",
                "type": ""
              }
            ],
            "src": "2003:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2272:161:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2318:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2327:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2330:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2320:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2320:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2320:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2293:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2302:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2289:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2289:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2314:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2285:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2285:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2282:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2343:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2366:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2353:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2353:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2343:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2385:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2412:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2423:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2408:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2408:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2395:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2395:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2385:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2230:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2241:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2253:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2261:6:105",
                "type": ""
              }
            ],
            "src": "2185:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2539:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2549:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2561:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2572:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2557:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2557:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2549:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2591:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2606:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2622:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2627:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2618:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2618:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2631:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2614:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2614:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2602:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2602:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2584:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2584:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2584:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2508:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2519:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2530:4:105",
                "type": ""
              }
            ],
            "src": "2438:203:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2741:92:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2751:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2763:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2774:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2759:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2759:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2751:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2793:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "2818:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2811:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2811:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2804:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2804:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2786:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2786:41:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2786:41:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2710:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2721:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2732:4:105",
                "type": ""
              }
            ],
            "src": "2646:187:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2965:162:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2975:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2987:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2998:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2983:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2983:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2975:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3017:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3032:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3048:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3053:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "3044:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3044:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3057:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "3040:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3040:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3028:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3028:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3010:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3010:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3010:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3081:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3092:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3077:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3077:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "3101:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3109:10:105",
                            "type": "",
                            "value": "0xffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3097:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3097:23:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3070:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3070:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3070:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint32__to_t_address_t_uint32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2926:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2937:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2945:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2956:4:105",
                "type": ""
              }
            ],
            "src": "2838:289:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3259:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3269:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3281:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3292:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3277:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3277:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3269:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3311:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3326:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3342:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3347:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "3338:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3338:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3351:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "3334:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3334:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3322:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3322:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3304:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3304:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3304:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_IUniswapV3Factory_$7456__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3228:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3239:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3250:4:105",
                "type": ""
              }
            ],
            "src": "3132:229:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3495:145:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3505:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3517:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3528:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3513:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3513:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3505:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3547:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3562:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3578:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3583:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "3574:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3574:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3587:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "3570:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3570:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3558:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3558:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3540:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3540:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3540:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3611:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3622:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3607:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3607:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "3627:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3600:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3600:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3600:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3456:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3467:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3475:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3486:4:105",
                "type": ""
              }
            ],
            "src": "3366:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3800:233:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3810:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3822:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3833:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3818:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3818:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3810:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3845:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3863:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3868:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3859:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3859:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3872:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "3855:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3855:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3849:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3890:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3905:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "3913:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3901:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3901:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3883:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3883:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3883:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3937:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3948:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3933:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3933:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "3957:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "3965:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3953:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3953:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3926:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3926:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3926:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3989:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4000:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3985:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3985:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "4009:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4017:8:105",
                            "type": "",
                            "value": "0xffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4005:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4005:21:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3978:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3978:49:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3978:49:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint24__to_t_address_t_address_t_uint24__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3753:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3764:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3772:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3780:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3791:4:105",
                "type": ""
              }
            ],
            "src": "3645:388:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4119:170:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4165:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4174:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4177:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4167:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4167:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4167:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4140:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4149:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4136:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4136:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4161:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4132:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4132:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4129:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4190:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4209:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "4203:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4203:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "4194:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4253:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "4228:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4228:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4228:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4268:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "4278:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4268:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4085:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4096:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4108:6:105",
                "type": ""
              }
            ],
            "src": "4038:251:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4475:294:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4485:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4497:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4508:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4493:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4493:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4485:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4521:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4539:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4544:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "4535:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4535:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4548:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "4531:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4531:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4525:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4566:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4581:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4589:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4577:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4577:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4559:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4559:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4559:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4613:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4624:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4609:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4609:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "4633:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4641:8:105",
                            "type": "",
                            "value": "0xffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4629:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4629:21:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4602:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4602:49:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4602:49:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4671:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4682:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4667:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4667:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "4691:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4699:10:105",
                            "type": "",
                            "value": "0xffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4687:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4687:23:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4660:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4660:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4660:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4731:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4742:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4727:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4727:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value3",
                            "nodeType": "YulIdentifier",
                            "src": "4751:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4759:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4747:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4747:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4720:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4720:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4720:43:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint24_t_uint32_t_address__to_t_address_t_uint24_t_uint32_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4420:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "4431:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4439:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4447:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4455:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4466:4:105",
                "type": ""
              }
            ],
            "src": "4294:475:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4948:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4965:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4976:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4958:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4958:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4958:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4999:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5010:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4995:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4995:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5015:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4988:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4988:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4988:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5038:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5049:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5034:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5034:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5054:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5027:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5027:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5027:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5109:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5120:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5105:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5105:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f206772616e74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5125:17:105",
                        "type": "",
                        "value": " admin to grant"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5098:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5098:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5098:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5152:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5164:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5175:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5160:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5160:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5152:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4925:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4939:4:105",
                "type": ""
              }
            ],
            "src": "4774:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5364:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5381:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5392:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5374:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5374:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5374:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5415:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5426:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5411:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5411:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5431:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5404:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5404:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5404:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5454:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5465:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5450:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5450:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5470:34:105",
                        "type": "",
                        "value": "AccessControl: can only renounce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5443:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5443:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5443:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5525:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5536:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5521:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5521:18:105"
                      },
                      {
                        "hexValue": "20726f6c657320666f722073656c66",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5541:17:105",
                        "type": "",
                        "value": " roles for self"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5514:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5514:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5514:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5568:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5580:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5591:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5576:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5576:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5568:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5341:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5355:4:105",
                "type": ""
              }
            ],
            "src": "5190:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5638:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5655:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5662:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5667:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "5658:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5658:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5648:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5648:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5648:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5695:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5698:4:105",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5688:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5688:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5688:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5719:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5722:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "5712:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5712:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5712:15:105"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "5606:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5770:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5787:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5794:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5799:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "5790:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5790:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5780:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5780:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5780:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5827:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5830:4:105",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5820:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5820:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5820:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5851:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5854:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "5844:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5844:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5844:15:105"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "5738:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6019:498:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6029:12:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6039:2:105",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6033:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6050:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6068:9:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6079:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6064:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6064:18:105"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "6054:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6098:9:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6109:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6091:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6091:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6091:21:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6121:17:105",
                  "value": {
                    "name": "tail_1",
                    "nodeType": "YulIdentifier",
                    "src": "6132:6:105"
                  },
                  "variables": [
                    {
                      "name": "pos",
                      "nodeType": "YulTypedName",
                      "src": "6125:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6147:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "6167:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "6161:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6161:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "6151:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "6190:6:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6198:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6183:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6183:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6183:22:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6214:25:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6225:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6236:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6221:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6221:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "6214:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6248:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "6266:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6274:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6262:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6262:15:105"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "6252:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6286:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6295:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "6290:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6354:137:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "6375:3:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "srcPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "6390:6:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "6384:5:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "6384:13:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6399:10:105",
                                  "type": "",
                                  "value": "0xffffffff"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "6380:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6380:30:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "6368:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6368:43:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6368:43:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "6424:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "6435:3:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "6440:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "6431:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6431:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "6424:3:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "6456:25:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "6470:6:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "6478:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "6466:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6466:15:105"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "6456:6:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "6316:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6319:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "6313:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6313:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "6327:18:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6329:14:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "6338:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6341:1:105",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "6334:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6334:9:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "6329:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "6309:3:105",
                    "statements": []
                  },
                  "src": "6305:186:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6500:11:105",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "6508:3:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6500:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5988:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5999:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6010:4:105",
                "type": ""
              }
            ],
            "src": "5870:647:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6567:230:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6577:19:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6593:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "6587:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6587:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "6577:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6605:58:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "6627:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "size",
                                "nodeType": "YulIdentifier",
                                "src": "6643:4:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6649:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6639:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6639:13:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6658:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "6654:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6654:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6635:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6635:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6623:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6623:40:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "6609:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6738:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "6740:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6740:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6740:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "6681:10:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6693:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "6678:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6678:34:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "6717:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "6729:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "6714:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6714:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "6675:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6675:62:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6672:88:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6776:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "6780:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6769:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6769:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6769:22:105"
                }
              ]
            },
            "name": "allocate_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "6547:4:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "6556:6:105",
                "type": ""
              }
            ],
            "src": "6522:275:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6869:114:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6913:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "6915:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6915:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6915:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6885:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6893:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6882:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6882:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6879:56:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6944:33:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6960:1:105",
                            "type": "",
                            "value": "5"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "6963:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "6956:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6956:14:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6972:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6952:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6952:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "6944:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_array_int56_dyn",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "6849:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "6860:4:105",
                "type": ""
              }
            ],
            "src": "6802:181:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7063:657:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7112:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7121:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7124:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7114:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7114:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7114:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7091:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7099:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7087:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7087:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "7106:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "7083:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7083:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "7076:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7076:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7073:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7137:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7153:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "7147:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7147:13:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "7141:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7169:14:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "7179:4:105",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "7173:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7192:69:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "7257:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_array_int56_dyn",
                          "nodeType": "YulIdentifier",
                          "src": "7219:37:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7219:41:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "7203:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7203:58:105"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "7196:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7270:16:105",
                  "value": {
                    "name": "dst",
                    "nodeType": "YulIdentifier",
                    "src": "7283:3:105"
                  },
                  "variables": [
                    {
                      "name": "dst_1",
                      "nodeType": "YulTypedName",
                      "src": "7274:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "7302:3:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "7307:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7295:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7295:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7295:15:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7319:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "7330:3:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "7335:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7326:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7326:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "7319:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7347:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "7369:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7381:1:105",
                                "type": "",
                                "value": "5"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "7384:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "7377:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7377:10:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7365:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7365:23:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "7390:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7361:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7361:32:105"
                  },
                  "variables": [
                    {
                      "name": "srcEnd",
                      "nodeType": "YulTypedName",
                      "src": "7351:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7421:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7430:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7433:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7423:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7423:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7423:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "7408:6:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "7416:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7405:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7405:15:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7402:35:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7446:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7461:6:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "7469:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7457:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7457:15:105"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "7450:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7537:154:105",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "7551:23:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "7570:3:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "7564:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7564:10:105"
                        },
                        "variables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "7555:5:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value",
                              "nodeType": "YulIdentifier",
                              "src": "7612:5:105"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "7587:24:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7587:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7587:31:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "7638:3:105"
                            },
                            {
                              "name": "value",
                              "nodeType": "YulIdentifier",
                              "src": "7643:5:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "7631:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7631:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7631:18:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "7662:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "7673:3:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "7678:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "7669:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7669:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "7662:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "7492:3:105"
                      },
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "7497:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "7489:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7489:15:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "7505:23:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "7507:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "7518:3:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "7523:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "7514:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7514:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "7507:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "7485:3:105",
                    "statements": []
                  },
                  "src": "7481:210:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7700:14:105",
                  "value": {
                    "name": "dst_1",
                    "nodeType": "YulIdentifier",
                    "src": "7709:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "7700:5:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_array_uint160_dyn_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "7037:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7045:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "7053:5:105",
                "type": ""
              }
            ],
            "src": "6988:732:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7871:1157:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7917:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7926:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7929:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7919:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7919:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7919:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7892:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7901:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7888:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7888:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7913:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7884:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7884:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7881:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7942:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7962:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "7956:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7956:16:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "7946:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7981:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "7991:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "7985:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8036:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8045:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8048:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8038:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8038:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8038:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "8024:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "8032:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8021:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8021:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8018:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8061:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8075:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "8086:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8071:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8071:22:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "8065:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8141:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8150:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8153:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8143:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8143:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8143:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "8120:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8124:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8116:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8116:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8131:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "8112:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8112:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8105:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8105:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8102:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8166:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "8182:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "8176:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8176:9:105"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "8170:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8194:14:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "8204:4:105",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "8198:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8217:69:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "8282:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_array_int56_dyn",
                          "nodeType": "YulIdentifier",
                          "src": "8244:37:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8244:41:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "8228:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8228:58:105"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "8221:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8295:16:105",
                  "value": {
                    "name": "dst",
                    "nodeType": "YulIdentifier",
                    "src": "8308:3:105"
                  },
                  "variables": [
                    {
                      "name": "dst_1",
                      "nodeType": "YulTypedName",
                      "src": "8299:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "8327:3:105"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "8332:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8320:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8320:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8320:15:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8344:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "8355:3:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "8360:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8351:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8351:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "8344:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8372:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "8394:2:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8402:1:105",
                                "type": "",
                                "value": "5"
                              },
                              {
                                "name": "_3",
                                "nodeType": "YulIdentifier",
                                "src": "8405:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "8398:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8398:10:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8390:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8390:19:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "8411:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8386:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8386:28:105"
                  },
                  "variables": [
                    {
                      "name": "srcEnd",
                      "nodeType": "YulTypedName",
                      "src": "8376:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8446:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8455:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8458:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8448:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8448:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8448:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8429:6:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8437:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8426:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8426:19:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8423:39:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8471:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "8486:2:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "8490:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8482:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8482:11:105"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "8475:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8558:252:105",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8572:23:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "8591:3:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "8585:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8585:10:105"
                        },
                        "variables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "8576:5:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8663:74:105",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8681:11:105",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8691:1:105",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "_5",
                                  "nodeType": "YulTypedName",
                                  "src": "8685:2:105",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_5",
                                    "nodeType": "YulIdentifier",
                                    "src": "8716:2:105"
                                  },
                                  {
                                    "name": "_5",
                                    "nodeType": "YulIdentifier",
                                    "src": "8720:2:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "8709:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8709:14:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8709:14:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "8621:5:105"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8639:1:105",
                                      "type": "",
                                      "value": "6"
                                    },
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "8642:5:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "signextend",
                                    "nodeType": "YulIdentifier",
                                    "src": "8628:10:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8628:20:105"
                                }
                              ],
                              "functionName": {
                                "name": "eq",
                                "nodeType": "YulIdentifier",
                                "src": "8618:2:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8618:31:105"
                            }
                          ],
                          "functionName": {
                            "name": "iszero",
                            "nodeType": "YulIdentifier",
                            "src": "8611:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8611:39:105"
                        },
                        "nodeType": "YulIf",
                        "src": "8608:129:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "8757:3:105"
                            },
                            {
                              "name": "value",
                              "nodeType": "YulIdentifier",
                              "src": "8762:5:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "8750:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8750:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8750:18:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8781:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "8792:3:105"
                            },
                            {
                              "name": "_4",
                              "nodeType": "YulIdentifier",
                              "src": "8797:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "8788:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8788:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "8781:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "8513:3:105"
                      },
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8518:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "8510:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8510:15:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "8526:23:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8528:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "8539:3:105"
                            },
                            {
                              "name": "_4",
                              "nodeType": "YulIdentifier",
                              "src": "8544:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "8535:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8535:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "8528:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "8506:3:105",
                    "statements": []
                  },
                  "src": "8502:308:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8819:15:105",
                  "value": {
                    "name": "dst_1",
                    "nodeType": "YulIdentifier",
                    "src": "8829:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8819:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8843:41:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8869:9:105"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "8880:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8865:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8865:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "8859:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8859:25:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "8847:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8913:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8922:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8925:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8915:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8915:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8915:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "8899:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "8909:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8896:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8896:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8893:36:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8938:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8992:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "9003:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8988:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8988:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "9014:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_uint160_dyn_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "8948:39:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8948:74:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "8938:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7829:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7840:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7852:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7860:6:105",
                "type": ""
              }
            ],
            "src": "7725:1303:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9065:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9082:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9089:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9094:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "9085:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9085:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9075:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9075:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9075:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9122:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9125:4:105",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9115:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9115:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9115:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9146:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9149:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "9139:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9139:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9139:15:105"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "9033:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9212:312:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9222:27:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9244:1:105",
                        "type": "",
                        "value": "6"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9247:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "signextend",
                      "nodeType": "YulIdentifier",
                      "src": "9233:10:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9233:16:105"
                  },
                  "variables": [
                    {
                      "name": "x_1",
                      "nodeType": "YulTypedName",
                      "src": "9226:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9258:27:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9280:1:105",
                        "type": "",
                        "value": "6"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9283:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "signextend",
                      "nodeType": "YulIdentifier",
                      "src": "9269:10:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9269:16:105"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "9262:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9294:21:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "9308:3:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9313:1:105",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9304:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9304:11:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "9298:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9386:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9388:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9388:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9388:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "9338:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "9331:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9331:10:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x_1",
                            "nodeType": "YulIdentifier",
                            "src": "9347:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9360:16:105",
                                    "type": "",
                                    "value": "0x7fffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "9356:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9356:21:105"
                              },
                              {
                                "name": "y_1",
                                "nodeType": "YulIdentifier",
                                "src": "9379:3:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9352:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9352:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "9343:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9343:41:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9327:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9327:58:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9324:84:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9466:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9468:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9468:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9468:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "9424:2:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x_1",
                            "nodeType": "YulIdentifier",
                            "src": "9432:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9441:16:105",
                                "type": "",
                                "value": "0x7fffffffffffff"
                              },
                              {
                                "name": "y_1",
                                "nodeType": "YulIdentifier",
                                "src": "9459:3:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9437:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9437:26:105"
                          }
                        ],
                        "functionName": {
                          "name": "sgt",
                          "nodeType": "YulIdentifier",
                          "src": "9428:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9428:36:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9420:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9420:45:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9417:71:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9497:21:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "9509:3:105"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "9514:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "9505:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9505:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "9497:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_int56",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9194:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9197:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "9203:4:105",
                "type": ""
              }
            ],
            "src": "9165:359:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9561:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9578:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9585:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9590:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "9581:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9581:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9571:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9571:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9571:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9618:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9621:4:105",
                        "type": "",
                        "value": "0x12"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9611:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9611:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9611:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9642:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9645:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "9635:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9635:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9635:15:105"
                }
              ]
            },
            "name": "panic_error_0x12",
            "nodeType": "YulFunctionDefinition",
            "src": "9529:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9705:240:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9715:27:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9737:1:105",
                        "type": "",
                        "value": "6"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9740:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "signextend",
                      "nodeType": "YulIdentifier",
                      "src": "9726:10:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9726:16:105"
                  },
                  "variables": [
                    {
                      "name": "x_1",
                      "nodeType": "YulTypedName",
                      "src": "9719:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9751:27:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9773:1:105",
                        "type": "",
                        "value": "6"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9776:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "signextend",
                      "nodeType": "YulIdentifier",
                      "src": "9762:10:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9762:16:105"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "9755:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9802:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "9804:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9804:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9804:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "9797:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9790:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9790:11:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9787:37:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9889:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9891:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9891:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9891:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "x_1",
                            "nodeType": "YulIdentifier",
                            "src": "9843:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9852:16:105",
                                "type": "",
                                "value": "0x7fffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "9848:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9848:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "9840:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9840:30:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y_1",
                            "nodeType": "YulIdentifier",
                            "src": "9875:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9884:1:105",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "9880:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9880:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "9872:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9872:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9836:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9836:52:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9833:78:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9920:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "9930:3:105"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "9935:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "sdiv",
                      "nodeType": "YulIdentifier",
                      "src": "9925:4:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9925:14:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "9920:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_int56",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9690:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9693:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "9699:1:105",
                "type": ""
              }
            ],
            "src": "9661:284:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9986:130:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9996:27:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10018:1:105",
                        "type": "",
                        "value": "6"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10021:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "signextend",
                      "nodeType": "YulIdentifier",
                      "src": "10007:10:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10007:16:105"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "10000:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10047:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "10049:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10049:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10049:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "10042:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "10035:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10035:11:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10032:37:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10078:32:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10099:1:105",
                            "type": "",
                            "value": "6"
                          },
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "10102:1:105"
                          }
                        ],
                        "functionName": {
                          "name": "signextend",
                          "nodeType": "YulIdentifier",
                          "src": "10088:10:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10088:16:105"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "10106:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "smod",
                      "nodeType": "YulIdentifier",
                      "src": "10083:4:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10083:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "10078:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "mod_t_int56",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9971:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9974:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "9980:1:105",
                "type": ""
              }
            ],
            "src": "9950:166:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10166:147:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10176:35:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10202:1:105",
                        "type": "",
                        "value": "2"
                      },
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "10205:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "signextend",
                      "nodeType": "YulIdentifier",
                      "src": "10191:10:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10191:20:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "10180:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10249:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10251:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10251:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10251:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "10226:7:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10239:7:105",
                            "type": "",
                            "value": "8388607"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "10235:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10235:12:105"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "10223:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10223:25:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10220:51:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10280:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "10291:7:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10304:1:105",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "10300:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10300:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10287:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10287:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "10280:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "decrement_t_int24",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "10148:5:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "10158:3:105",
                "type": ""
              }
            ],
            "src": "10121:192:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10370:116:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10429:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10431:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10431:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10431:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "10401:1:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "10394:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10394:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "10387:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10387:17:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "10409:1:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10420:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "10416:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10416:6:105"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "10424:1:105"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "10412:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10412:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "10406:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10406:21:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "10383:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10383:45:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10380:71:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10460:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10475:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10478:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "10471:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10471:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "10460:7:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10349:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10352:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "10358:7:105",
                "type": ""
              }
            ],
            "src": "10318:168:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10665:238:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10682:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10693:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10675:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10675:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10675:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10716:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10727:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10712:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10712:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10732:2:105",
                        "type": "",
                        "value": "48"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10705:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10705:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10705:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10755:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10766:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10751:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10751:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10771:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10744:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10744:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10744:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10826:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10837:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10822:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10822:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f207265766f6b65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10842:18:105",
                        "type": "",
                        "value": " admin to revoke"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10815:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10815:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10815:46:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10870:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10882:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10893:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10878:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10878:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10870:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10642:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10656:4:105",
                "type": ""
              }
            ],
            "src": "10491:412:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11082:180:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11099:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11110:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11092:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11092:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11092:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11133:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11144:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11129:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11129:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11149:2:105",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11122:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11122:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11122:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11172:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11183:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11168:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11168:18:105"
                      },
                      {
                        "hexValue": "73656e64657220646f65736e277420686176652061646d696e20726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11188:32:105",
                        "type": "",
                        "value": "sender doesn't have admin role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11161:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11161:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11161:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11230:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11242:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11253:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11238:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11238:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11230:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11059:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11073:4:105",
                "type": ""
              }
            ],
            "src": "10908:354:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11316:76:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11338:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "11340:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11340:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11340:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "11332:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "11335:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "11329:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11329:8:105"
                  },
                  "nodeType": "YulIf",
                  "src": "11326:34:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11369:17:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "11381:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "11384:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "11377:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11377:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "11369:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "11298:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "11301:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "11307:4:105",
                "type": ""
              }
            ],
            "src": "11267:125:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11429:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11446:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11453:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11458:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "11449:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11449:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11439:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11439:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11439:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11486:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11489:4:105",
                        "type": "",
                        "value": "0x31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11479:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11479:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11479:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11510:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11513:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "11503:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11503:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11503:15:105"
                }
              ]
            },
            "name": "panic_error_0x31",
            "nodeType": "YulFunctionDefinition",
            "src": "11397:127:105"
          }
        ]
      },
      "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_uint256(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        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint24t_uint32(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        if iszero(eq(value_1, and(value_1, 0xffffff))) { revert(0, 0) }\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        if iszero(eq(value_2, and(value_2, 0xffffffff))) { revert(0, 0) }\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\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_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\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 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_encode_tuple_t_address_t_uint32__to_t_address_t_uint32__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, 0xffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IUniswapV3Factory_$7456__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_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_address_t_address_t_uint24__to_t_address_t_address_t_uint24__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, 0xffffff))\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        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint24_t_uint32_t_address__to_t_address_t_uint24_t_uint32_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, 0xffffff))\n        mstore(add(headStart, 64), and(value2, 0xffffffff))\n        mstore(add(headStart, 96), and(value3, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"AccessControl: sender must be an\")\n        mstore(add(headStart, 96), \" admin to grant\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"AccessControl: can only renounce\")\n        mstore(add(headStart, 96), \" roles for self\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_int56_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_array_uint160_dyn_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        let _4 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let srcEnd := add(add(_2, shl(5, _3)), _4)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, _4)\n        for { } lt(src, srcEnd) { src := add(src, _4) }\n        {\n            let value := mload(src)\n            if iszero(eq(value, signextend(6, value)))\n            {\n                let _5 := 0\n                revert(_5, _5)\n            }\n            mstore(dst, value)\n            dst := add(dst, _4)\n        }\n        value0 := dst_1\n        let offset_1 := mload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_array_uint160_dyn_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_int56(x, y) -> r\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        if iszero(y_1) { panic_error_0x12() }\n        if and(eq(x_1, not(0x7fffffffffffff)), eq(y_1, not(0))) { panic_error_0x11() }\n        r := sdiv(x_1, y_1)\n    }\n    function mod_t_int56(x, y) -> r\n    {\n        let y_1 := signextend(6, y)\n        if iszero(y_1) { panic_error_0x12() }\n        r := smod(signextend(6, x), y_1)\n    }\n    function decrement_t_int24(value) -> ret\n    {\n        let value_1 := signextend(2, value)\n        if eq(value_1, not(8388607)) { panic_error_0x11() }\n        ret := add(value_1, not(0))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 48)\n        mstore(add(headStart, 64), \"AccessControl: sender must be an\")\n        mstore(add(headStart, 96), \" admin to revoke\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"sender doesn't have admin role\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "363:3182:87:-:0;;;1138:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1210:36:87;;;;;1256:12;;;;1278:42;2054:4:96;1309:10:87;1278;:42::i;:::-;1138:189;;363:3182;;6727:110:96;6805:25;6816:4;6822:7;6805:10;:25::i;:::-;6727:110;;:::o;7044:184::-;7117:6;:12;;;;;;;;;;;:33;;7142:7;;7117:24;;;;;:33;;:::i;:::-;7113:109;;;7171:40;;719:10:33;;-1:-1:-1;;;;;7171:40:96;;;7183:4;;7171:40;;;;;7044:184;;:::o;7612:150:42:-;7682:4;7705:50;7710:3;-1:-1:-1;;;;;7730:23:42;;7705:4;:50::i;:::-;7698:57;;7612:150;;;;;:::o;1697:404::-;1760:4;3834:19;;;:12;;;:19;;;;;;1776:319;;-1:-1:-1;1818:23:42;;;;;;;;:11;:23;;;;;;;;;;;;;1998:18;;1976:19;;;:12;;;:19;;;;;;:40;;;;2030:11;;1776:319;-1:-1:-1;2079:5:42;2072:12;;14:150:105;-1:-1:-1;;;;;108:31:105;;98:42;;88:70;;154:1;151;144:12;88:70;14:150;:::o;169:449::-;274:6;282;335:2;323:9;314:7;310:23;306:32;303:52;;;351:1;348;341:12;303:52;383:9;377:16;402:50;446:5;402:50;:::i;:::-;521:2;506:18;;500:25;471:5;;-1:-1:-1;534:52:105;500:25;534:52;:::i;:::-;605:7;595:17;;;169:449;;;;;:::o;:::-;363:3182:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "363:3182:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3372:171;;;;;;:::i;:::-;;:::i;:::-;;2930:436;;;;;;:::i;:::-;;:::i;4421:112:96:-;;;;;;:::i;:::-;4478:7;4504:12;;;;;;;;;;:22;;;;4421:112;;;;1395:25:105;;;1383:2;1368:18;4421:112:96;;;;;;;;4783:223;;;;;;:::i;:::-;;:::i;5957:205::-;;;;;;:::i;:::-;;:::i;1333:1591:87:-;;;;;;:::i;:::-;;:::i;4055:185:96:-;;;;;;:::i;:::-;;:::i;3834:136::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2602:32:105;;;2584:51;;2572:2;2557:18;3834:136:96;2438:203:105;2819:137:96;;;;;;:::i;:::-;;:::i;:::-;;;2811:14:105;;2804:22;2786:41;;2774:2;2759:18;2819:137:96;2646:187:105;2009:49:96;;2054:4;2009:49;;501:37:87;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;501:37:87;;;-1:-1:-1;;;501:37:87;;;;;;;;;;-1:-1:-1;;;;;3028:32:105;;;3010:51;;3109:10;3097:23;;;3092:2;3077:18;;3070:51;2983:18;501:37:87;2838:289:105;465:29:87;;;;;3124:125:96;;;;;;:::i;:::-;;:::i;544:41:87:-;;;;;;:::i;:::-;;;;;;;;;;;;;;5240:226:96;;;;;;:::i;:::-;;:::i;406:53:87:-;;;;;3372:171;960:12;:10;:12::i;:::-;-1:-1:-1;;;;;3449:13:87;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;:21;;;3487:5:::1;:12:::0;;;;;;3480:19;;-1:-1:-1;;;;;;3480:19:87;;;3514:22;;3540:51:105;;;3607:18;;3600:34;;;3514:22:87::1;::::0;3513:18:105;3514:22:87::1;;;;;;;3372:171:::0;;:::o;2930:436::-;960:12;:10;:12::i;:::-;3030:15:::1;::::0;::::1;3026:47;;3054:19;;-1:-1:-1::0;;;3054:19:87::1;;;;;;;;;;;3026:47;3099:48;::::0;-1:-1:-1;;;3099:48:87;;-1:-1:-1;;;;;3126:4:87::1;3901:15:105::0;;3099:48:87::1;::::0;::::1;3883:34:105::0;3953:15;;;3933:18;;;3926:43;4017:8;4005:21;;3985:18;;;3978:49;-1:-1:-1;;3099:18:87::1;:26:::0;;::::1;::::0;::::1;::::0;3818:18:105;;3099:48:87::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3083:64:::0;-1:-1:-1;;;;;;1465:19:32;;;3157:57:87::1;;3196:18;;-1:-1:-1::0;;;3196:18:87::1;;;;;;;;;;;3157:57;-1:-1:-1::0;;;;;3224:12:87;;::::1;;::::0;;;:5:::1;:12;::::0;;;;;;;;:32;;;;::::1;-1:-1:-1::0;;;;;;3266:36:87;;;;;-1:-1:-1;;;3266:36:87::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;3317:42;;4559:34:105;;;4641:8;4629:21;;4609:18;;;4602:49;;;;4667:18;;;4660:51;4742:2;4727:18;;4720:43;;;;3317:42:87::1;::::0;4508:3:105;4493:19;3317:42:87::1;;;;;;;3016:350;2930:436:::0;;;:::o;4783:223:96:-;4874:6;:12;;;;;;;;;;:22;;;4866:45;;719:10:33;2819:137:96;:::i;4866:45::-;4858:105;;;;-1:-1:-1;;;4858:105:96;;4976:2:105;4858:105:96;;;4958:21:105;5015:2;4995:18;;;4988:30;5054:34;5034:18;;;5027:62;-1:-1:-1;;;5105:18:105;;;5098:45;5160:19;;4858:105:96;;;;;;;;;4974:25;4985:4;4991:7;4974:10;:25::i;:::-;4783:223;;:::o;5957:205::-;-1:-1:-1;;;;;6043:23:96;;719:10:33;6043:23:96;6035:83;;;;-1:-1:-1;;;6035:83:96;;5392:2:105;6035:83:96;;;5374:21:105;5431:2;5411:18;;;5404:30;5470:34;5450:18;;;5443:62;-1:-1:-1;;;5521:18:105;;;5514:45;5576:19;;6035:83:96;5190:411:105;6035:83:96;6129:26;6141:4;6147:7;6129:11;:26::i;1333:1591:87:-;-1:-1:-1;;;;;1443:17:87;;;1394:18;1443:17;;;:5;:17;;;;;;;;1424:36;;;;;;;;;;;;;;;-1:-1:-1;;;1424:36:87;;;;;;;;;;;;1394:18;;1470:61;;-1:-1:-1;;;;;;;1513:18:87;;;;;:6;:18;;;;;;;1333:1591::o;1470:61::-;1562:15;;;;1617;;;1630:1;1617:15;;;;;;;;;1542:17;;1617:15;;;;;;;;;;;;-1:-1:-1;1617:15:87;1587:45;;1659:10;1642:11;1654:1;1642:14;;;;;;;;:::i;:::-;;;;;;:27;;;;;;;;;;;1696:1;1679:11;1691:1;1679:14;;;;;;;;:::i;:::-;:18;;;;:14;;;;;;;;;;;:18;1760:16;;1745:53;;-1:-1:-1;;;1745:53:87;;1709:30;;-1:-1:-1;;;;;1745:40:87;;;;:53;;1786:11;;1745:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1745:53:87;;;;;;;;;;;;:::i;:::-;1708:90;;;1808:26;1858:15;1874:1;1858:18;;;;;;;;:::i;:::-;;;;;;;1837:15;1853:1;1837:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;1808:68;-1:-1:-1;1886:24:87;1919:48;1948:18;;;1808:68;1919:48;:::i;:::-;1886:82;;2050:1;2027:20;:24;;;:83;;;;-1:-1:-1;2056:48:87;2085:18;;;2056:20;:48;:::i;:::-;:53;;;;2027:83;2023:109;;;2112:20;;;;:::i;:::-;;;;2023:109;2151:20;2174:47;2202:18;2174:27;:47::i;:::-;2151:70;-1:-1:-1;2356:17:87;-1:-1:-1;;;;;2340:33:87;;;2336:555;;2389:17;2409:36;-1:-1:-1;;;;;2409:36:87;;;;:::i;:::-;2389:56;;2485:4;-1:-1:-1;;;;;2472:17:87;:10;-1:-1:-1;;;;;2472:17:87;;:139;;2569:42;-1:-1:-1;;;2595:4:87;2601:9;2569:15;:42::i;:::-;2472:139;;;2508:42;2524:9;2535:4;-1:-1:-1;;;2508:15:87;:42::i;:::-;2459:152;;2375:247;2336:555;;;2642:17;2662:52;-1:-1:-1;;;;;2662:52:87;;;2706:7;2662:15;:52::i;:::-;2642:72;;2754:4;-1:-1:-1;;;;;2741:17:87;:10;-1:-1:-1;;;;;2741:17:87;;:139;;2838:42;-1:-1:-1;;;2864:4:87;2870:9;2838:15;:42::i;:::-;2741:139;;;2777:42;2793:9;2804:4;-1:-1:-1;;;2777:15:87;:42::i;:::-;2728:152;;2628:263;2336:555;2900:17;;;;;;;1333:1591;;;:::o;4055:185:96:-;4135:7;4161:12;;;;;;;;;;;-1:-1:-1;;;;;4206:25:96;;4161:72;;:36;;:72;;;;;;4055:185;;;;;:::o;3834:136::-;3907:7;3933:12;;;;;;;;;;:30;;3957:5;3933:23;:30::i;:::-;3926:37;3834:136;-1:-1:-1;;;3834:136:96:o;2819:137::-;2888:4;2911:12;;;;;;;;;;:38;;2941:7;2911:29;:38::i;3124:125::-;3187:7;3213:12;;;;;;;;;;:29;;:27;:29::i;5240:226::-;5332:6;:12;;;;;;;;;;:22;;;5324:45;;719:10:33;2819:137:96;:::i;5324:45::-;5316:106;;;;-1:-1:-1;;;5316:106:96;;10693:2:105;5316:106:96;;;10675:21:105;10732:2;10712:18;;;10705:30;10771:34;10751:18;;;10744:62;-1:-1:-1;;;10822:18:105;;;10815:46;10878:19;;5316:106:96;10491:412:105;7612:150:42;7682:4;7705:50;7710:3;-1:-1:-1;;;;;7730:23:42;;7705:4;:50::i;996:136:87:-;1049:41;2054:4:96;719:10:33;2819:137:96;:::i;1049:41:87:-;1041:84;;;;-1:-1:-1;;;1041:84:87;;11110:2:105;1041:84:87;;;11092:21:105;11149:2;11129:18;;;11122:30;11188:32;11168:18;;;11161:60;11238:18;;1041:84:87;10908:354:105;1041:84:87;996:136::o;7044:184:96:-;7117:6;:12;;;;;;;;;;:33;;7142:7;7117:24;:33::i;:::-;7113:109;;;7171:40;;719:10:33;;-1:-1:-1;;;;;7171:40:96;;;7183:4;;7171:40;;;;;7044:184;;:::o;7234:188::-;7308:6;:12;;;;;;;;;;:36;;7336:7;7308:27;:36::i;:::-;7304:112;;;7365:40;;719:10:33;;-1:-1:-1;;;;;7365:40:96;;;7377:4;;7365:40;;;;;7234:188;;:::o;1385:2759:102:-;1448:20;1504:15;1529:1;1522:4;:8;;;:57;;1573:4;1566:12;;1522:57;;;1549:4;1542:12;;1541:13;;1522:57;1504:75;-1:-1:-1;667:9:102;1597:35;;1593:51;;;1641:3;;-1:-1:-1;;;1641:3:102;;;;;;;;;;;1593:51;1659:13;1685:3;1675:13;;:125;;-1:-1:-1;;;1675:125:102;;;1712:34;1675:125;1659:141;;;-1:-1:-1;1828:3:102;1818:13;;:18;1814:83;;1855:34;1847:42;1894:3;1846:51;1814:83;1925:3;1915:13;;:18;1911:83;;1952:34;1944:42;1991:3;1943:51;1911:83;2022:3;2012:13;;:18;2008:83;;2049:34;2041:42;2088:3;2040:51;2008:83;2119:4;2109:14;;:19;2105:84;;2147:34;2139:42;2186:3;2138:51;2105:84;2217:4;2207:14;;:19;2203:84;;2245:34;2237:42;2284:3;2236:51;2203:84;2315:4;2305:14;;:19;2301:84;;2343:34;2335:42;2382:3;2334:51;2301:84;2413:4;2403:14;;:19;2399:84;;2441:34;2433:42;2480:3;2432:51;2399:84;2511:5;2501:15;;:20;2497:85;;2540:34;2532:42;2579:3;2531:51;2497:85;2610:5;2600:15;;:20;2596:85;;2639:34;2631:42;2678:3;2630:51;2596:85;2709:5;2699:15;;:20;2695:85;;2738:34;2730:42;2777:3;2729:51;2695:85;2808:5;2798:15;;:20;2794:85;;2837:34;2829:42;2876:3;2828:51;2794:85;2907:6;2897:16;;:21;2893:86;;2937:34;2929:42;2976:3;2928:51;2893:86;3007:6;2997:16;;:21;2993:86;;3037:34;3029:42;3076:3;3028:51;2993:86;3107:6;3097:16;;:21;3093:86;;3137:34;3129:42;3176:3;3128:51;3093:86;3207:6;3197:16;;:21;3193:86;;3237:34;3229:42;3276:3;3228:51;3193:86;3307:7;3297:17;;:22;3293:86;;3338:33;3330:41;3376:3;3329:50;3293:86;3407:7;3397:17;;:22;3393:85;;3438:32;3430:40;3475:3;3429:49;3393:85;3506:7;3496:17;;:22;3492:83;;3537:30;3529:38;3572:3;3528:47;3492:83;3603:7;3593:17;;:22;3589:78;;3634:25;3626:33;3664:3;3625:42;3589:78;3693:1;3686:4;:8;;;3682:47;;;3724:5;-1:-1:-1;;3704:25:102;;;;;:::i;:::-;;3696:33;;3682:47;4104:7;4095:5;:17;:22;:30;;4124:1;4095:30;;;4120:1;4095:30;4078:48;;4088:2;4079:5;:11;;4078:48;4055:72;;1480:2658;;1385:2759;;;:::o;741:4127:99:-;853:14;;;-1:-1:-1;;1416:1:99;1413;1406:20;1459:1;1456;1452:9;1443:18;;1514:5;1510:2;1507:13;1499:5;1495:2;1491:14;1487:34;1478:43;;;1615:5;1624:1;1615:10;1611:203;;;1667:1;1653:11;:15;1645:24;;;;;;-1:-1:-1;1728:23:99;;;;-1:-1:-1;1786:13:99;;1611:203;1953:5;1939:11;:19;1931:28;;;;;;2260:17;2344:11;2341:1;2338;2331:25;2736:12;2752:15;;;2751:31;;2888:22;;;;;3763:1;3744;:15;;3743:21;;4006:17;;;4002:21;;3995:28;4068:17;;;4064:21;;4057:28;4131:17;;;4127:21;;4120:28;4194:17;;;4190:21;;4183:28;4257:17;;;4253:21;;4246:28;4321:17;;;4317:21;;;4310:28;3300:12;;;;3296:23;;;3321:1;3292:31;2489:20;;;2478:32;;;3359:12;;;;2536:21;;;;3032:16;;;;3350:21;;;;4813:11;;;;;-1:-1:-1;;741:4127:99;;;;;:::o;8870:156:42:-;8944:7;8994:22;8998:3;9010:5;8994:3;:22::i;8167:165::-;-1:-1:-1;;;;;8300:23:42;;8247:4;3834:19;;;:12;;;:19;;;;;;:24;;8270:55;3738:127;8413:115;8476:7;8502:19;8510:3;4028:18;;3946:107;1697:404;1760:4;3834:19;;;:12;;;:19;;;;;;1776:319;;-1:-1:-1;1818:23:42;;;;;;;;:11;:23;;;;;;;;;;;;;1998:18;;1976:19;;;:12;;;:19;;;;;;:40;;;;2030:11;;1776:319;-1:-1:-1;2079:5:42;2072:12;;7930:156;8003:4;8026:53;8034:3;-1:-1:-1;;;;;8054:23:42;;8026:7;:53::i;4395:118::-;4462:7;4488:3;:11;;4500:5;4488:18;;;;;;;;:::i;:::-;;;;;;;;;4481:25;;4395:118;;;;:::o;2269:1388::-;2335:4;2472:19;;;:12;;;:19;;;;;;2506:15;;2502:1149;;2875:21;2899:14;2912:1;2899:10;:14;:::i;:::-;2947:18;;2875:38;;-1:-1:-1;2927:17:42;;2947:22;;2968:1;;2947:22;:::i;:::-;2927:42;;3001:13;2988:9;:26;2984:398;;3034:17;3054:3;:11;;3066:9;3054:22;;;;;;;;:::i;:::-;;;;;;;;;3034:42;;3205:9;3176:3;:11;;3188:13;3176:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3288:23;;;:12;;;:23;;;;;:36;;;2984:398;3460:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3552:3;:12;;:19;3565:5;3552:19;;;;;;;;;;;3545:26;;;3593:4;3586:11;;;;;;;2502:1149;3635:5;3628:12;;;;;14:131:105;-1:-1:-1;;;;;89:31:105;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:315::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:105:o;470:589::-;545:6;553;561;614:2;602:9;593:7;589:23;585:32;582:52;;;630:1;627;620:12;582:52;669:9;656:23;688:31;713:5;688:31;:::i;:::-;738:5;-1:-1:-1;795:2:105;780:18;;767:32;843:8;830:22;;818:35;;808:63;;867:1;864;857:12;808:63;890:7;-1:-1:-1;949:2:105;934:18;;921:32;997:10;984:24;;972:37;;962:65;;1023:1;1020;1013:12;962:65;1046:7;1036:17;;;470:589;;;;;:::o;1064:180::-;1123:6;1176:2;1164:9;1155:7;1151:23;1147:32;1144:52;;;1192:1;1189;1182:12;1144:52;-1:-1:-1;1215:23:105;;1064:180;-1:-1:-1;1064:180:105:o;1431:315::-;1499:6;1507;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;1612:9;1599:23;1589:33;;1672:2;1661:9;1657:18;1644:32;1685:31;1710:5;1685:31;:::i;:::-;1735:5;1725:15;;;1431:315;;;;;:::o;1751:247::-;1810:6;1863:2;1851:9;1842:7;1838:23;1834:32;1831:52;;;1879:1;1876;1869:12;1831:52;1918:9;1905:23;1937:31;1962:5;1937:31;:::i;2185:248::-;2253:6;2261;2314:2;2302:9;2293:7;2289:23;2285:32;2282:52;;;2330:1;2327;2320:12;2282:52;-1:-1:-1;;2353:23:105;;;2423:2;2408:18;;;2395:32;;-1:-1:-1;2185:248:105:o;4038:251::-;4108:6;4161:2;4149:9;4140:7;4136:23;4132:32;4129:52;;;4177:1;4174;4167:12;4129:52;4209:9;4203:16;4228:31;4253:5;4228:31;:::i;5606:127::-;5667:10;5662:3;5658:20;5655:1;5648:31;5698:4;5695:1;5688:15;5722:4;5719:1;5712:15;5738:127;5799:10;5794:3;5790:20;5787:1;5780:31;5830:4;5827:1;5820:15;5854:4;5851:1;5844:15;5870:647;6039:2;6091:21;;;6161:13;;6064:18;;;6183:22;;;6010:4;;6039:2;6262:15;;;;6236:2;6221:18;;;6010:4;6305:186;6319:6;6316:1;6313:13;6305:186;;;6384:13;;6399:10;6380:30;6368:43;;6466:15;;;;6431:12;;;;6341:1;6334:9;6305:186;;;-1:-1:-1;6508:3:105;;5870:647;-1:-1:-1;;;;;;5870:647:105:o;6522:275::-;6593:2;6587:9;6658:2;6639:13;;-1:-1:-1;;6635:27:105;6623:40;;6693:18;6678:34;;6714:22;;;6675:62;6672:88;;;6740:18;;:::i;:::-;6776:2;6769:22;6522:275;;-1:-1:-1;6522:275:105:o;6802:181::-;6860:4;6893:18;6885:6;6882:30;6879:56;;;6915:18;;:::i;:::-;-1:-1:-1;6960:1:105;6956:14;6972:4;6952:25;;6802:181::o;6988:732::-;7053:5;7106:3;7099:4;7091:6;7087:17;7083:27;7073:55;;7124:1;7121;7114:12;7073:55;7153:6;7147:13;7179:4;7203:58;7219:41;7257:2;7219:41;:::i;:::-;7203:58;:::i;:::-;7295:15;;;7381:1;7377:10;;;;7365:23;;7361:32;;;7326:12;;;;7405:15;;;7402:35;;;7433:1;7430;7423:12;7402:35;7469:2;7461:6;7457:15;7481:210;7497:6;7492:3;7489:15;7481:210;;;7570:3;7564:10;7587:31;7612:5;7587:31;:::i;:::-;7631:18;;7669:12;;;;7514;;7481:210;;;-1:-1:-1;7709:5:105;6988:732;-1:-1:-1;;;;;;6988:732:105:o;7725:1303::-;7852:6;7860;7913:2;7901:9;7892:7;7888:23;7884:32;7881:52;;;7929:1;7926;7919:12;7881:52;7962:9;7956:16;7991:18;8032:2;8024:6;8021:14;8018:34;;;8048:1;8045;8038:12;8018:34;8086:6;8075:9;8071:22;8061:32;;8131:7;8124:4;8120:2;8116:13;8112:27;8102:55;;8153:1;8150;8143:12;8102:55;8182:2;8176:9;8204:4;8228:58;8244:41;8282:2;8244:41;:::i;8228:58::-;8320:15;;;8402:1;8398:10;;;;8390:19;;8386:28;;;8351:12;;;;8426:19;;;8423:39;;;8458:1;8455;8448:12;8423:39;8482:11;;;;8502:308;8518:6;8513:3;8510:15;8502:308;;;8591:3;8585:10;8642:5;8639:1;8628:20;8621:5;8618:31;8608:129;;8691:1;8720:2;8716;8709:14;8608:129;8750:18;;8535:12;;;;8788;;;;8502:308;;;8865:18;;;8859:25;8829:5;;-1:-1:-1;8859:25:105;;-1:-1:-1;;;8896:16:105;;;8893:36;;;8925:1;8922;8915:12;8893:36;;8948:74;9014:7;9003:8;8992:9;8988:24;8948:74;:::i;:::-;8938:84;;;7725:1303;;;;;:::o;9033:127::-;9094:10;9089:3;9085:20;9082:1;9075:31;9125:4;9122:1;9115:15;9149:4;9146:1;9139:15;9165:359;9203:4;9247:1;9244;9233:16;9283:1;9280;9269:16;9313:1;9308:3;9304:11;9379:3;9360:16;9356:21;9352:31;9347:3;9343:41;9338:2;9331:10;9327:58;9324:84;;;9388:18;;:::i;:::-;9459:3;9441:16;9437:26;9432:3;9428:36;9424:2;9420:45;9417:71;;;9468:18;;:::i;:::-;-1:-1:-1;9505:13:105;;;9165:359;-1:-1:-1;;;9165:359:105:o;9529:127::-;9590:10;9585:3;9581:20;9578:1;9571:31;9621:4;9618:1;9611:15;9645:4;9642:1;9635:15;9661:284;9699:1;9740;9737;9726:16;9776:1;9773;9762:16;9797:3;9787:37;;9804:18;;:::i;:::-;-1:-1:-1;;9840:30:105;;-1:-1:-1;;9872:15:105;;9836:52;9833:78;;;9891:18;;:::i;:::-;9925:14;;;9661:284;-1:-1:-1;;;9661:284:105:o;9950:166::-;9980:1;10021;10018;10007:16;10042:3;10032:37;;10049:18;;:::i;:::-;10106:3;10102:1;10099;10088:16;10083:27;10078:32;;;9950:166;;;;:::o;10121:192::-;10158:3;10205:5;10202:1;10191:20;10239:7;10235:12;10226:7;10223:25;10220:51;;;10251:18;;:::i;:::-;-1:-1:-1;;10287:20:105;;10121:192;-1:-1:-1;;10121:192:105:o;10318:168::-;10358:7;10424:1;10420;10416:6;10412:14;10409:1;10406:21;10401:1;10394:9;10387:17;10383:45;10380:71;;;10431:18;;:::i;:::-;-1:-1:-1;10471:9:105;;10318:168::o;11267:125::-;11307:4;11335:1;11332;11329:8;11326:34;;;11340:18;;:::i;:::-;-1:-1:-1;11377:9:105;;11267:125::o;11397:127::-;11458:10;11453:3;11449:20;11446:1;11439:31;11489:4;11486:1;11479:15;11513:4;11510:1;11503:15",
  "source": "// The Licensed Work is (c) 2022 Sygma\n// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.8.11;\n\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol';\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\nimport \"../../../utils/TickMath.sol\";\nimport \"../../../utils/FullMath.sol\";\nimport \"../../../utils/AccessControl.sol\";\n\ncontract TwapOracle is AccessControl {\n    IUniswapV3Factory public immutable UNISWAP_V3_FACTORY;\n    address public immutable WETH;\n\n    mapping(address => Pool) public pools;\n    mapping(address => uint256) public prices;\n\n    struct Pool {\n        address poolAddress;\n        uint32 timeWindow;\n    }\n\n    event PoolSet(address token, uint24 feeTier, uint32 timeWindow, address pool);\n    event PriceSet(address token, uint256 price);\n\n    error PairNotSupported();\n    error InvalidTimeWindow();\n    error InvalidPrice();\n    error UniswapPoolAvailable();\n\n    modifier onlyAdmin() {\n        _onlyAdmin();\n        _;\n    }\n\n    function _onlyAdmin() private view {\n        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), \"sender doesn't have admin role\");\n    }\n\n    constructor(IUniswapV3Factory _uniswapFactory, address _weth) {\n        UNISWAP_V3_FACTORY = _uniswapFactory;\n        WETH = _weth;\n        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);\n    }\n\n    function getPrice(address quoteToken) external view returns (uint256 quotePrice) {\n        Pool memory pool = pools[quoteToken];\n        if (pool.poolAddress == address(0)) return prices[quoteToken];\n\n        uint32 secondsAgo = pool.timeWindow;\n        uint32[] memory secondsAgos = new uint32[](2);\n        secondsAgos[0] = secondsAgo;\n        secondsAgos[1] = 0;\n\n        (int56[] memory tickCumulatives, ) = IUniswapV3Pool(pool.poolAddress).observe(secondsAgos);\n        int56 tickCumulativesDelta = tickCumulatives[1] - tickCumulatives[0];\n        int24 arithmeticMeanTick = int24(tickCumulativesDelta / int56(uint56(secondsAgo)));\n        // Always round to negative infinity\n        if (tickCumulativesDelta < 0 && (tickCumulativesDelta % int56(uint56(secondsAgo)) != 0)) arithmeticMeanTick--;\n        \n        uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(arithmeticMeanTick);\n\n        // Calculate quoteAmount with better precision if it doesn't overflow when multiplied by itself\n        if (sqrtRatioX96 <= type(uint128).max) {\n            uint256 ratioX192 = uint256(sqrtRatioX96) * sqrtRatioX96;\n            quotePrice = quoteToken < WETH\n                ? FullMath.mulDiv(ratioX192, 1e18, 1 << 192)\n                : FullMath.mulDiv(1 << 192, 1e18, ratioX192);\n        } else {\n            uint256 ratioX128 = FullMath.mulDiv(sqrtRatioX96, sqrtRatioX96, 1 << 64);\n            quotePrice = quoteToken < WETH\n                ? FullMath.mulDiv(ratioX128, 1e18, 1 << 128)\n                : FullMath.mulDiv(1 << 128, 1e18, ratioX128);\n        }\n        return quotePrice;\n    }\n\n    function setPool(address token, uint24 feeTier, uint32 timeWindow) external onlyAdmin {\n        if (timeWindow == 0) revert InvalidTimeWindow();\n        address _pool = UNISWAP_V3_FACTORY.getPool(WETH, token, feeTier);\n        if (!Address.isContract(_pool)) revert PairNotSupported();\n        pools[token].poolAddress = _pool;\n        pools[token].timeWindow = timeWindow;\n        emit PoolSet(token, feeTier, timeWindow, _pool);\n    }\n\n    function setPrice(address token, uint256 price) external onlyAdmin {\n        prices[token] = price;\n        delete pools[token];\n        emit PriceSet(token, price);\n    }\n}\n",
  "sourcePath": "/home/runner/work/sygma-solidity/sygma-solidity/contracts/handlers/fee/dynamic/TwapOracle.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/fee/dynamic/TwapOracle.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "Context": [
        5305
      ],
      "EnumerableSet": [
        7373
      ],
      "FullMath": [
        19002
      ],
      "IUniswapV3Factory": [
        7456
      ],
      "IUniswapV3Pool": [
        7478
      ],
      "IUniswapV3PoolActions": [
        7574
      ],
      "IUniswapV3PoolDerivedState": [
        7605
      ],
      "IUniswapV3PoolEvents": [
        7724
      ],
      "IUniswapV3PoolImmutables": [
        7764
      ],
      "IUniswapV3PoolOwnerActions": [
        7790
      ],
      "IUniswapV3PoolState": [
        7898
      ],
      "TickMath": [
        19704
      ],
      "TwapOracle": [
        18079
      ]
    },
    "id": 18080,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17703,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:87"
      },
      {
        "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol",
        "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol",
        "id": 17704,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 7457,
        "src": "106:69:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
        "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
        "id": 17705,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 7479,
        "src": "176:66:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/TickMath.sol",
        "file": "../../../utils/TickMath.sol",
        "id": 17706,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 19705,
        "src": "243:37:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/FullMath.sol",
        "file": "../../../utils/FullMath.sol",
        "id": 17707,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 19003,
        "src": "281:37:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/AccessControl.sol",
        "file": "../../../utils/AccessControl.sol",
        "id": 17708,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 18613,
        "src": "319:42:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 17709,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18612,
              "src": "386:13:87"
            },
            "id": 17710,
            "nodeType": "InheritanceSpecifier",
            "src": "386:13:87"
          }
        ],
        "canonicalName": "TwapOracle",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 18079,
        "linearizedBaseContracts": [
          18079,
          18612,
          5305
        ],
        "name": "TwapOracle",
        "nameLocation": "372:10:87",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "f73e5aab",
            "id": 17713,
            "mutability": "immutable",
            "name": "UNISWAP_V3_FACTORY",
            "nameLocation": "441:18:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "406:53:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
              "typeString": "contract IUniswapV3Factory"
            },
            "typeName": {
              "id": 17712,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 17711,
                "name": "IUniswapV3Factory",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 7456,
                "src": "406:17:87"
              },
              "referencedDeclaration": 7456,
              "src": "406:17:87",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                "typeString": "contract IUniswapV3Factory"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ad5c4648",
            "id": 17715,
            "mutability": "immutable",
            "name": "WETH",
            "nameLocation": "490:4:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "465:29:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 17714,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "465:7:87",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "a4063dbc",
            "id": 17720,
            "mutability": "mutable",
            "name": "pools",
            "nameLocation": "533:5:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "501:37:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
              "typeString": "mapping(address => struct TwapOracle.Pool)"
            },
            "typeName": {
              "id": 17719,
              "keyType": {
                "id": 17716,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "509:7:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "501:24:87",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                "typeString": "mapping(address => struct TwapOracle.Pool)"
              },
              "valueType": {
                "id": 17718,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 17717,
                  "name": "Pool",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17729,
                  "src": "520:4:87"
                },
                "referencedDeclaration": 17729,
                "src": "520:4:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Pool_$17729_storage_ptr",
                  "typeString": "struct TwapOracle.Pool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "cfed246b",
            "id": 17724,
            "mutability": "mutable",
            "name": "prices",
            "nameLocation": "579:6:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "544:41:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 17723,
              "keyType": {
                "id": 17721,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "552:7:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "544:27:87",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 17722,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "563:7:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "TwapOracle.Pool",
            "id": 17729,
            "members": [
              {
                "constant": false,
                "id": 17726,
                "mutability": "mutable",
                "name": "poolAddress",
                "nameLocation": "622:11:87",
                "nodeType": "VariableDeclaration",
                "scope": 17729,
                "src": "614:19:87",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 17725,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "614:7:87",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 17728,
                "mutability": "mutable",
                "name": "timeWindow",
                "nameLocation": "650:10:87",
                "nodeType": "VariableDeclaration",
                "scope": 17729,
                "src": "643:17:87",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 17727,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "643:6:87",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Pool",
            "nameLocation": "599:4:87",
            "nodeType": "StructDefinition",
            "scope": 18079,
            "src": "592:75:87",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 17739,
            "name": "PoolSet",
            "nameLocation": "679:7:87",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17731,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "695:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "687:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17730,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "687:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17733,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "feeTier",
                  "nameLocation": "709:7:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "702:14:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 17732,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "702:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17735,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "timeWindow",
                  "nameLocation": "725:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "718:17:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 17734,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "718:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17737,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "pool",
                  "nameLocation": "745:4:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "737:12:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "737:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "686:64:87"
            },
            "src": "673:78:87"
          },
          {
            "anonymous": false,
            "id": 17745,
            "name": "PriceSet",
            "nameLocation": "762:8:87",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17741,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "779:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17745,
                  "src": "771:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17740,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "771:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17743,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "price",
                  "nameLocation": "794:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17745,
                  "src": "786:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17742,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "786:7:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "770:30:87"
            },
            "src": "756:45:87"
          },
          {
            "id": 17747,
            "name": "PairNotSupported",
            "nameLocation": "813:16:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17746,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "829:2:87"
            },
            "src": "807:25:87"
          },
          {
            "id": 17749,
            "name": "InvalidTimeWindow",
            "nameLocation": "843:17:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17748,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "860:2:87"
            },
            "src": "837:26:87"
          },
          {
            "id": 17751,
            "name": "InvalidPrice",
            "nameLocation": "874:12:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "886:2:87"
            },
            "src": "868:21:87"
          },
          {
            "id": 17753,
            "name": "UniswapPoolAvailable",
            "nameLocation": "900:20:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17752,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "920:2:87"
            },
            "src": "894:29:87"
          },
          {
            "body": {
              "id": 17759,
              "nodeType": "Block",
              "src": "950:40:87",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17755,
                      "name": "_onlyAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17773,
                      "src": "960:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 17756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "960:12:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17757,
                  "nodeType": "ExpressionStatement",
                  "src": "960:12:87"
                },
                {
                  "id": 17758,
                  "nodeType": "PlaceholderStatement",
                  "src": "982:1:87"
                }
              ]
            },
            "id": 17760,
            "name": "onlyAdmin",
            "nameLocation": "938:9:87",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 17754,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "947:2:87"
            },
            "src": "929:61:87",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 17772,
              "nodeType": "Block",
              "src": "1031:101:87",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 17765,
                            "name": "DEFAULT_ADMIN_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18344,
                            "src": "1057:18:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 17766,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5295,
                              "src": "1077:10:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 17767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1077:12:87",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17764,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18381,
                          "src": "1049:7:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 17768,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1049:41:87",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e64657220646f65736e277420686176652061646d696e20726f6c65",
                        "id": 17769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1092:32:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        },
                        "value": "sender doesn't have admin role"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        }
                      ],
                      "id": 17763,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1041:7:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1041:84:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17771,
                  "nodeType": "ExpressionStatement",
                  "src": "1041:84:87"
                }
              ]
            },
            "id": 17773,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyAdmin",
            "nameLocation": "1005:10:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17761,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1015:2:87"
            },
            "returnParameters": {
              "id": 17762,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1031:0:87"
            },
            "scope": 18079,
            "src": "996:136:87",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 17795,
              "nodeType": "Block",
              "src": "1200:127:87",
              "statements": [
                {
                  "expression": {
                    "id": 17783,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 17781,
                      "name": "UNISWAP_V3_FACTORY",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17713,
                      "src": "1210:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                        "typeString": "contract IUniswapV3Factory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 17782,
                      "name": "_uniswapFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17776,
                      "src": "1231:15:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                        "typeString": "contract IUniswapV3Factory"
                      }
                    },
                    "src": "1210:36:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                      "typeString": "contract IUniswapV3Factory"
                    }
                  },
                  "id": 17784,
                  "nodeType": "ExpressionStatement",
                  "src": "1210:36:87"
                },
                {
                  "expression": {
                    "id": 17787,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 17785,
                      "name": "WETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17715,
                      "src": "1256:4:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 17786,
                      "name": "_weth",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17778,
                      "src": "1263:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1256:12:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 17788,
                  "nodeType": "ExpressionStatement",
                  "src": "1256:12:87"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 17790,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "1289:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 17791,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1309:3:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1309:10:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17789,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18547,
                      "src": "1278:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 17793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1278:42:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17794,
                  "nodeType": "ExpressionStatement",
                  "src": "1278:42:87"
                }
              ]
            },
            "id": 17796,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17776,
                  "mutability": "mutable",
                  "name": "_uniswapFactory",
                  "nameLocation": "1168:15:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17796,
                  "src": "1150:33:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                    "typeString": "contract IUniswapV3Factory"
                  },
                  "typeName": {
                    "id": 17775,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 17774,
                      "name": "IUniswapV3Factory",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 7456,
                      "src": "1150:17:87"
                    },
                    "referencedDeclaration": 7456,
                    "src": "1150:17:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                      "typeString": "contract IUniswapV3Factory"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17778,
                  "mutability": "mutable",
                  "name": "_weth",
                  "nameLocation": "1193:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17796,
                  "src": "1185:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17777,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1185:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1149:50:87"
            },
            "returnParameters": {
              "id": 17780,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1200:0:87"
            },
            "scope": 18079,
            "src": "1138:189:87",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17993,
              "nodeType": "Block",
              "src": "1414:1510:87",
              "statements": [
                {
                  "assignments": [
                    17805
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17805,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "1436:4:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1424:16:87",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                        "typeString": "struct TwapOracle.Pool"
                      },
                      "typeName": {
                        "id": 17804,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 17803,
                          "name": "Pool",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 17729,
                          "src": "1424:4:87"
                        },
                        "referencedDeclaration": 17729,
                        "src": "1424:4:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_storage_ptr",
                          "typeString": "struct TwapOracle.Pool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17809,
                  "initialValue": {
                    "baseExpression": {
                      "id": 17806,
                      "name": "pools",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17720,
                      "src": "1443:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                        "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                      }
                    },
                    "id": 17808,
                    "indexExpression": {
                      "id": 17807,
                      "name": "quoteToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17798,
                      "src": "1449:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1443:17:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Pool_$17729_storage",
                      "typeString": "struct TwapOracle.Pool storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1424:36:87"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 17816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 17810,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17805,
                        "src": "1474:4:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                          "typeString": "struct TwapOracle.Pool memory"
                        }
                      },
                      "id": 17811,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "poolAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17726,
                      "src": "1474:16:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 17814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1502:1:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 17813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1494:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 17812,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1494:7:87",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 17815,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1494:10:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1474:30:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 17821,
                  "nodeType": "IfStatement",
                  "src": "1470:61:87",
                  "trueBody": {
                    "expression": {
                      "baseExpression": {
                        "id": 17817,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17724,
                        "src": "1513:6:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 17819,
                      "indexExpression": {
                        "id": 17818,
                        "name": "quoteToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17798,
                        "src": "1520:10:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1513:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 17802,
                    "id": 17820,
                    "nodeType": "Return",
                    "src": "1506:25:87"
                  }
                },
                {
                  "assignments": [
                    17823
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17823,
                      "mutability": "mutable",
                      "name": "secondsAgo",
                      "nameLocation": "1549:10:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1542:17:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17822,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1542:6:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17826,
                  "initialValue": {
                    "expression": {
                      "id": 17824,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17805,
                      "src": "1562:4:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                        "typeString": "struct TwapOracle.Pool memory"
                      }
                    },
                    "id": 17825,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "timeWindow",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17728,
                    "src": "1562:15:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1542:35:87"
                },
                {
                  "assignments": [
                    17831
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17831,
                      "mutability": "mutable",
                      "name": "secondsAgos",
                      "nameLocation": "1603:11:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1587:27:87",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                        "typeString": "uint32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17829,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1587:6:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17830,
                        "nodeType": "ArrayTypeName",
                        "src": "1587:8:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                          "typeString": "uint32[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17837,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "32",
                        "id": 17835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1630:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 17834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1617:12:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17832,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1621:6:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17833,
                        "nodeType": "ArrayTypeName",
                        "src": "1621:8:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                          "typeString": "uint32[]"
                        }
                      }
                    },
                    "id": 17836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1617:15:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                      "typeString": "uint32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1587:45:87"
                },
                {
                  "expression": {
                    "id": 17842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 17838,
                        "name": "secondsAgos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17831,
                        "src": "1642:11:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      "id": 17840,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 17839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1654:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1642:14:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 17841,
                      "name": "secondsAgo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17823,
                      "src": "1659:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "1642:27:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 17843,
                  "nodeType": "ExpressionStatement",
                  "src": "1642:27:87"
                },
                {
                  "expression": {
                    "id": 17848,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 17844,
                        "name": "secondsAgos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17831,
                        "src": "1679:11:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      "id": 17846,
                      "indexExpression": {
                        "hexValue": "31",
                        "id": 17845,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1691:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1679:14:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 17847,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1696:1:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1679:18:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 17849,
                  "nodeType": "ExpressionStatement",
                  "src": "1679:18:87"
                },
                {
                  "assignments": [
                    17854,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17854,
                      "mutability": "mutable",
                      "name": "tickCumulatives",
                      "nameLocation": "1724:15:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1709:30:87",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                        "typeString": "int56[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17852,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "1709:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "id": 17853,
                        "nodeType": "ArrayTypeName",
                        "src": "1709:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                          "typeString": "int56[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 17862,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 17860,
                        "name": "secondsAgos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17831,
                        "src": "1786:11:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 17856,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17805,
                              "src": "1760:4:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                                "typeString": "struct TwapOracle.Pool memory"
                              }
                            },
                            "id": 17857,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "poolAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17726,
                            "src": "1760:16:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17855,
                          "name": "IUniswapV3Pool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7478,
                          "src": "1745:14:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$7478_$",
                            "typeString": "type(contract IUniswapV3Pool)"
                          }
                        },
                        "id": 17858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1745:32:87",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$7478",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      "id": 17859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "observe",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7590,
                      "src": "1745:40:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                        "typeString": "function (uint32[] memory) view external returns (int56[] memory,uint160[] memory)"
                      }
                    },
                    "id": 17861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1745:53:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                      "typeString": "tuple(int56[] memory,uint160[] memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1708:90:87"
                },
                {
                  "assignments": [
                    17864
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17864,
                      "mutability": "mutable",
                      "name": "tickCumulativesDelta",
                      "nameLocation": "1814:20:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1808:26:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      },
                      "typeName": {
                        "id": 17863,
                        "name": "int56",
                        "nodeType": "ElementaryTypeName",
                        "src": "1808:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17872,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_int56",
                      "typeString": "int56"
                    },
                    "id": 17871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 17865,
                        "name": "tickCumulatives",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17854,
                        "src": "1837:15:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                          "typeString": "int56[] memory"
                        }
                      },
                      "id": 17867,
                      "indexExpression": {
                        "hexValue": "31",
                        "id": 17866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1853:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1837:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 17868,
                        "name": "tickCumulatives",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17854,
                        "src": "1858:15:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                          "typeString": "int56[] memory"
                        }
                      },
                      "id": 17870,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 17869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1874:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1858:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      }
                    },
                    "src": "1837:39:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int56",
                      "typeString": "int56"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1808:68:87"
                },
                {
                  "assignments": [
                    17874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17874,
                      "mutability": "mutable",
                      "name": "arithmeticMeanTick",
                      "nameLocation": "1892:18:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1886:24:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 17873,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1886:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17887,
                  "initialValue": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "id": 17885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 17877,
                          "name": "tickCumulativesDelta",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17864,
                          "src": "1919:20:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 17882,
                                  "name": "secondsAgo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17823,
                                  "src": "1955:10:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "id": 17881,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1948:6:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint56_$",
                                  "typeString": "type(uint56)"
                                },
                                "typeName": {
                                  "id": 17880,
                                  "name": "uint56",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1948:6:87",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 17883,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1948:18:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint56",
                                "typeString": "uint56"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint56",
                                "typeString": "uint56"
                              }
                            ],
                            "id": 17879,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1942:5:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int56_$",
                              "typeString": "type(int56)"
                            },
                            "typeName": {
                              "id": 17878,
                              "name": "int56",
                              "nodeType": "ElementaryTypeName",
                              "src": "1942:5:87",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 17884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1942:25:87",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "src": "1919:48:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      ],
                      "id": 17876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1913:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int24_$",
                        "typeString": "type(int24)"
                      },
                      "typeName": {
                        "id": 17875,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1913:5:87",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 17886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1913:55:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1886:82:87"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 17903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      },
                      "id": 17890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 17888,
                        "name": "tickCumulativesDelta",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17864,
                        "src": "2027:20:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 17889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2050:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2027:24:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          },
                          "id": 17901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "id": 17899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 17891,
                              "name": "tickCumulativesDelta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17864,
                              "src": "2056:20:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "%",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 17896,
                                      "name": "secondsAgo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17823,
                                      "src": "2092:10:87",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    ],
                                    "id": 17895,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2085:6:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint56_$",
                                      "typeString": "type(uint56)"
                                    },
                                    "typeName": {
                                      "id": 17894,
                                      "name": "uint56",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2085:6:87",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 17897,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2085:18:87",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint56",
                                    "typeString": "uint56"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint56",
                                    "typeString": "uint56"
                                  }
                                ],
                                "id": 17893,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2079:5:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int56_$",
                                  "typeString": "type(int56)"
                                },
                                "typeName": {
                                  "id": 17892,
                                  "name": "int56",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2079:5:87",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 17898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2079:25:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "src": "2056:48:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 17900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2108:1:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2056:53:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 17902,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2055:55:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2027:83:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 17907,
                  "nodeType": "IfStatement",
                  "src": "2023:109:87",
                  "trueBody": {
                    "expression": {
                      "id": 17905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "2112:20:87",
                      "subExpression": {
                        "id": 17904,
                        "name": "arithmeticMeanTick",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17874,
                        "src": "2112:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "id": 17906,
                    "nodeType": "ExpressionStatement",
                    "src": "2112:20:87"
                  }
                },
                {
                  "assignments": [
                    17909
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17909,
                      "mutability": "mutable",
                      "name": "sqrtRatioX96",
                      "nameLocation": "2159:12:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "2151:20:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 17908,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "2151:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17914,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 17912,
                        "name": "arithmeticMeanTick",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17874,
                        "src": "2202:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      ],
                      "expression": {
                        "id": 17910,
                        "name": "TickMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19704,
                        "src": "2174:8:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TickMath_$19704_$",
                          "typeString": "type(library TickMath)"
                        }
                      },
                      "id": 17911,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getSqrtRatioAtTick",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19561,
                      "src": "2174:27:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                        "typeString": "function (int24) pure returns (uint160)"
                      }
                    },
                    "id": 17913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2174:47:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2151:70:87"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 17921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 17915,
                      "name": "sqrtRatioX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17909,
                      "src": "2340:12:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 17918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2361:7:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            },
                            "typeName": {
                              "id": 17917,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "2361:7:87",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            }
                          ],
                          "id": 17916,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967269,
                          "src": "2356:4:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 17919,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2356:13:87",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint128",
                          "typeString": "type(uint128)"
                        }
                      },
                      "id": 17920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "2356:17:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "2340:33:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17989,
                    "nodeType": "Block",
                    "src": "2628:263:87",
                    "statements": [
                      {
                        "assignments": [
                          17956
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17956,
                            "mutability": "mutable",
                            "name": "ratioX128",
                            "nameLocation": "2650:9:87",
                            "nodeType": "VariableDeclaration",
                            "scope": 17989,
                            "src": "2642:17:87",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17955,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2642:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 17965,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 17959,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17909,
                              "src": "2678:12:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 17960,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17909,
                              "src": "2692:12:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                "typeString": "int_const 18446744073709551616"
                              },
                              "id": 17963,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "31",
                                "id": 17961,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2706:1:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "hexValue": "3634",
                                "id": 17962,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2711:2:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_64_by_1",
                                  "typeString": "int_const 64"
                                },
                                "value": "64"
                              },
                              "src": "2706:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                "typeString": "int_const 18446744073709551616"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                "typeString": "int_const 18446744073709551616"
                              }
                            ],
                            "expression": {
                              "id": 17957,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19002,
                              "src": "2662:8:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 17958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18957,
                            "src": "2662:15:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 17964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2662:52:87",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2642:72:87"
                      },
                      {
                        "expression": {
                          "id": 17987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 17966,
                            "name": "quotePrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17801,
                            "src": "2728:10:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 17969,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 17967,
                                "name": "quoteToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17798,
                                "src": "2741:10:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 17968,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17715,
                                "src": "2754:4:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2741:17:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "id": 17982,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17980,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2854:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313238",
                                    "id": 17981,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2859:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  "src": "2854:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17983,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2864:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "id": 17984,
                                  "name": "ratioX128",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17956,
                                  "src": "2870:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 17978,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2838:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2838:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2838:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "2741:139:87",
                            "trueExpression": {
                              "arguments": [
                                {
                                  "id": 17972,
                                  "name": "ratioX128",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17956,
                                  "src": "2793:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17973,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2804:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "id": 17976,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17974,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2810:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313238",
                                    "id": 17975,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2815:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  "src": "2810:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  }
                                ],
                                "expression": {
                                  "id": 17970,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2777:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2777:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17977,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2777:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2728:152:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17988,
                        "nodeType": "ExpressionStatement",
                        "src": "2728:152:87"
                      }
                    ]
                  },
                  "id": 17990,
                  "nodeType": "IfStatement",
                  "src": "2336:555:87",
                  "trueBody": {
                    "id": 17954,
                    "nodeType": "Block",
                    "src": "2375:247:87",
                    "statements": [
                      {
                        "assignments": [
                          17923
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17923,
                            "mutability": "mutable",
                            "name": "ratioX192",
                            "nameLocation": "2397:9:87",
                            "nodeType": "VariableDeclaration",
                            "scope": 17954,
                            "src": "2389:17:87",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17922,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2389:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 17930,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 17926,
                                "name": "sqrtRatioX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17909,
                                "src": "2417:12:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 17925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2409:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 17924,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2409:7:87",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 17927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2409:21:87",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 17928,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17909,
                            "src": "2433:12:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2409:36:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2389:56:87"
                      },
                      {
                        "expression": {
                          "id": 17952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 17931,
                            "name": "quotePrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17801,
                            "src": "2459:10:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 17934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 17932,
                                "name": "quoteToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17798,
                                "src": "2472:10:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 17933,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17715,
                                "src": "2485:4:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2472:17:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  },
                                  "id": 17947,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17945,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2585:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313932",
                                    "id": 17946,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2590:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  "src": "2585:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17948,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2595:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "id": 17949,
                                  "name": "ratioX192",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17923,
                                  "src": "2601:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 17943,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2569:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17944,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2569:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2569:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17951,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "2472:139:87",
                            "trueExpression": {
                              "arguments": [
                                {
                                  "id": 17937,
                                  "name": "ratioX192",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17923,
                                  "src": "2524:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17938,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2535:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  },
                                  "id": 17941,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17939,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2541:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313932",
                                    "id": 17940,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2546:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  "src": "2541:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  }
                                ],
                                "expression": {
                                  "id": 17935,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2508:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17936,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2508:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2508:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2459:152:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17953,
                        "nodeType": "ExpressionStatement",
                        "src": "2459:152:87"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 17991,
                    "name": "quotePrice",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17801,
                    "src": "2907:10:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17802,
                  "id": 17992,
                  "nodeType": "Return",
                  "src": "2900:17:87"
                }
              ]
            },
            "functionSelector": "41976e09",
            "id": 17994,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPrice",
            "nameLocation": "1342:8:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17798,
                  "mutability": "mutable",
                  "name": "quoteToken",
                  "nameLocation": "1359:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17994,
                  "src": "1351:18:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17797,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1351:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1350:20:87"
            },
            "returnParameters": {
              "id": 17802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17801,
                  "mutability": "mutable",
                  "name": "quotePrice",
                  "nameLocation": "1402:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17994,
                  "src": "1394:18:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17800,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1394:7:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1393:20:87"
            },
            "scope": 18079,
            "src": "1333:1591:87",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18051,
              "nodeType": "Block",
              "src": "3016:350:87",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 18007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 18005,
                      "name": "timeWindow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18000,
                      "src": "3030:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 18006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3044:1:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3030:15:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18011,
                  "nodeType": "IfStatement",
                  "src": "3026:47:87",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 18008,
                        "name": "InvalidTimeWindow",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17749,
                        "src": "3054:17:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 18009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3054:19:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18010,
                    "nodeType": "RevertStatement",
                    "src": "3047:26:87"
                  }
                },
                {
                  "assignments": [
                    18013
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18013,
                      "mutability": "mutable",
                      "name": "_pool",
                      "nameLocation": "3091:5:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 18051,
                      "src": "3083:13:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18012,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3083:7:87",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 18020,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 18016,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17715,
                        "src": "3126:4:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18017,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17996,
                        "src": "3132:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18018,
                        "name": "feeTier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17998,
                        "src": "3139:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      ],
                      "expression": {
                        "id": 18014,
                        "name": "UNISWAP_V3_FACTORY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17713,
                        "src": "3099:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                          "typeString": "contract IUniswapV3Factory"
                        }
                      },
                      "id": 18015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getPool",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7429,
                      "src": "3099:26:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint24_$returns$_t_address_$",
                        "typeString": "function (address,address,uint24) view external returns (address)"
                      }
                    },
                    "id": 18019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3099:48:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3083:64:87"
                },
                {
                  "condition": {
                    "id": 18025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3161:26:87",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 18023,
                          "name": "_pool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18013,
                          "src": "3181:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 18021,
                          "name": "Address",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5283,
                          "src": "3162:7:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Address_$5283_$",
                            "typeString": "type(library Address)"
                          }
                        },
                        "id": 18022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isContract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5006,
                        "src": "3162:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 18024,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3162:25:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18029,
                  "nodeType": "IfStatement",
                  "src": "3157:57:87",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 18026,
                        "name": "PairNotSupported",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17747,
                        "src": "3196:16:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 18027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3196:18:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18028,
                    "nodeType": "RevertStatement",
                    "src": "3189:25:87"
                  }
                },
                {
                  "expression": {
                    "id": 18035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 18030,
                          "name": "pools",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17720,
                          "src": "3224:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                            "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                          }
                        },
                        "id": 18032,
                        "indexExpression": {
                          "id": 18031,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17996,
                          "src": "3230:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3224:12:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_storage",
                          "typeString": "struct TwapOracle.Pool storage ref"
                        }
                      },
                      "id": 18033,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "poolAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17726,
                      "src": "3224:24:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18034,
                      "name": "_pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18013,
                      "src": "3251:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3224:32:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 18036,
                  "nodeType": "ExpressionStatement",
                  "src": "3224:32:87"
                },
                {
                  "expression": {
                    "id": 18042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 18037,
                          "name": "pools",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17720,
                          "src": "3266:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                            "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                          }
                        },
                        "id": 18039,
                        "indexExpression": {
                          "id": 18038,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17996,
                          "src": "3272:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3266:12:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_storage",
                          "typeString": "struct TwapOracle.Pool storage ref"
                        }
                      },
                      "id": 18040,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "timeWindow",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17728,
                      "src": "3266:23:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18041,
                      "name": "timeWindow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18000,
                      "src": "3292:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "3266:36:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 18043,
                  "nodeType": "ExpressionStatement",
                  "src": "3266:36:87"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 18045,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17996,
                        "src": "3325:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18046,
                        "name": "feeTier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17998,
                        "src": "3332:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      {
                        "id": 18047,
                        "name": "timeWindow",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18000,
                        "src": "3341:10:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 18048,
                        "name": "_pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18013,
                        "src": "3353:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18044,
                      "name": "PoolSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17739,
                      "src": "3317:7:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint24_$_t_uint32_$_t_address_$returns$__$",
                        "typeString": "function (address,uint24,uint32,address)"
                      }
                    },
                    "id": 18049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3317:42:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18050,
                  "nodeType": "EmitStatement",
                  "src": "3312:47:87"
                }
              ]
            },
            "functionSelector": "20f383db",
            "id": 18052,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 18003,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 18002,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17760,
                  "src": "3006:9:87"
                },
                "nodeType": "ModifierInvocation",
                "src": "3006:9:87"
              }
            ],
            "name": "setPool",
            "nameLocation": "2939:7:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17996,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "2955:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18052,
                  "src": "2947:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17995,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2947:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17998,
                  "mutability": "mutable",
                  "name": "feeTier",
                  "nameLocation": "2969:7:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18052,
                  "src": "2962:14:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 17997,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2962:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18000,
                  "mutability": "mutable",
                  "name": "timeWindow",
                  "nameLocation": "2985:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18052,
                  "src": "2978:17:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 17999,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2978:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2946:50:87"
            },
            "returnParameters": {
              "id": 18004,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3016:0:87"
            },
            "scope": 18079,
            "src": "2930:436:87",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18077,
              "nodeType": "Block",
              "src": "3439:104:87",
              "statements": [
                {
                  "expression": {
                    "id": 18065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 18061,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17724,
                        "src": "3449:6:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 18063,
                      "indexExpression": {
                        "id": 18062,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18054,
                        "src": "3456:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3449:13:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18064,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18056,
                      "src": "3465:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3449:21:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18066,
                  "nodeType": "ExpressionStatement",
                  "src": "3449:21:87"
                },
                {
                  "expression": {
                    "id": 18070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "3480:19:87",
                    "subExpression": {
                      "baseExpression": {
                        "id": 18067,
                        "name": "pools",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17720,
                        "src": "3487:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                          "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                        }
                      },
                      "id": 18069,
                      "indexExpression": {
                        "id": 18068,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18054,
                        "src": "3493:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3487:12:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Pool_$17729_storage",
                        "typeString": "struct TwapOracle.Pool storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18071,
                  "nodeType": "ExpressionStatement",
                  "src": "3480:19:87"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 18073,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18054,
                        "src": "3523:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18074,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18056,
                        "src": "3530:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18072,
                      "name": "PriceSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17745,
                      "src": "3514:8:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 18075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3514:22:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18076,
                  "nodeType": "EmitStatement",
                  "src": "3509:27:87"
                }
              ]
            },
            "functionSelector": "00e4768b",
            "id": 18078,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 18059,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 18058,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17760,
                  "src": "3429:9:87"
                },
                "nodeType": "ModifierInvocation",
                "src": "3429:9:87"
              }
            ],
            "name": "setPrice",
            "nameLocation": "3381:8:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18054,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "3398:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18078,
                  "src": "3390:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18053,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3390:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18056,
                  "mutability": "mutable",
                  "name": "price",
                  "nameLocation": "3413:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18078,
                  "src": "3405:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18055,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3405:7:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3389:30:87"
            },
            "returnParameters": {
              "id": 18060,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3439:0:87"
            },
            "scope": 18079,
            "src": "3372:171:87",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 18080,
        "src": "363:3182:87",
        "usedErrors": [
          17747,
          17749,
          17751,
          17753,
          19163
        ]
      }
    ],
    "src": "81:3465:87"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/handlers/fee/dynamic/TwapOracle.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "Context": [
        5305
      ],
      "EnumerableSet": [
        7373
      ],
      "FullMath": [
        19002
      ],
      "IUniswapV3Factory": [
        7456
      ],
      "IUniswapV3Pool": [
        7478
      ],
      "IUniswapV3PoolActions": [
        7574
      ],
      "IUniswapV3PoolDerivedState": [
        7605
      ],
      "IUniswapV3PoolEvents": [
        7724
      ],
      "IUniswapV3PoolImmutables": [
        7764
      ],
      "IUniswapV3PoolOwnerActions": [
        7790
      ],
      "IUniswapV3PoolState": [
        7898
      ],
      "TickMath": [
        19704
      ],
      "TwapOracle": [
        18079
      ]
    },
    "id": 18080,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17703,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:87"
      },
      {
        "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol",
        "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol",
        "id": 17704,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 7457,
        "src": "106:69:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
        "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
        "id": 17705,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 7479,
        "src": "176:66:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/TickMath.sol",
        "file": "../../../utils/TickMath.sol",
        "id": 17706,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 19705,
        "src": "243:37:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/FullMath.sol",
        "file": "../../../utils/FullMath.sol",
        "id": 17707,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 19003,
        "src": "281:37:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/AccessControl.sol",
        "file": "../../../utils/AccessControl.sol",
        "id": 17708,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18080,
        "sourceUnit": 18613,
        "src": "319:42:87",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 17709,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18612,
              "src": "386:13:87"
            },
            "id": 17710,
            "nodeType": "InheritanceSpecifier",
            "src": "386:13:87"
          }
        ],
        "canonicalName": "TwapOracle",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 18079,
        "linearizedBaseContracts": [
          18079,
          18612,
          5305
        ],
        "name": "TwapOracle",
        "nameLocation": "372:10:87",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "f73e5aab",
            "id": 17713,
            "mutability": "immutable",
            "name": "UNISWAP_V3_FACTORY",
            "nameLocation": "441:18:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "406:53:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
              "typeString": "contract IUniswapV3Factory"
            },
            "typeName": {
              "id": 17712,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 17711,
                "name": "IUniswapV3Factory",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 7456,
                "src": "406:17:87"
              },
              "referencedDeclaration": 7456,
              "src": "406:17:87",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                "typeString": "contract IUniswapV3Factory"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ad5c4648",
            "id": 17715,
            "mutability": "immutable",
            "name": "WETH",
            "nameLocation": "490:4:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "465:29:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 17714,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "465:7:87",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "a4063dbc",
            "id": 17720,
            "mutability": "mutable",
            "name": "pools",
            "nameLocation": "533:5:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "501:37:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
              "typeString": "mapping(address => struct TwapOracle.Pool)"
            },
            "typeName": {
              "id": 17719,
              "keyType": {
                "id": 17716,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "509:7:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "501:24:87",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                "typeString": "mapping(address => struct TwapOracle.Pool)"
              },
              "valueType": {
                "id": 17718,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 17717,
                  "name": "Pool",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17729,
                  "src": "520:4:87"
                },
                "referencedDeclaration": 17729,
                "src": "520:4:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Pool_$17729_storage_ptr",
                  "typeString": "struct TwapOracle.Pool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "cfed246b",
            "id": 17724,
            "mutability": "mutable",
            "name": "prices",
            "nameLocation": "579:6:87",
            "nodeType": "VariableDeclaration",
            "scope": 18079,
            "src": "544:41:87",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 17723,
              "keyType": {
                "id": 17721,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "552:7:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "544:27:87",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 17722,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "563:7:87",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "TwapOracle.Pool",
            "id": 17729,
            "members": [
              {
                "constant": false,
                "id": 17726,
                "mutability": "mutable",
                "name": "poolAddress",
                "nameLocation": "622:11:87",
                "nodeType": "VariableDeclaration",
                "scope": 17729,
                "src": "614:19:87",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 17725,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "614:7:87",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 17728,
                "mutability": "mutable",
                "name": "timeWindow",
                "nameLocation": "650:10:87",
                "nodeType": "VariableDeclaration",
                "scope": 17729,
                "src": "643:17:87",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 17727,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "643:6:87",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Pool",
            "nameLocation": "599:4:87",
            "nodeType": "StructDefinition",
            "scope": 18079,
            "src": "592:75:87",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 17739,
            "name": "PoolSet",
            "nameLocation": "679:7:87",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17731,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "695:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "687:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17730,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "687:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17733,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "feeTier",
                  "nameLocation": "709:7:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "702:14:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 17732,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "702:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17735,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "timeWindow",
                  "nameLocation": "725:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "718:17:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 17734,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "718:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17737,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "pool",
                  "nameLocation": "745:4:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17739,
                  "src": "737:12:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "737:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "686:64:87"
            },
            "src": "673:78:87"
          },
          {
            "anonymous": false,
            "id": 17745,
            "name": "PriceSet",
            "nameLocation": "762:8:87",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17741,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "779:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17745,
                  "src": "771:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17740,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "771:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17743,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "price",
                  "nameLocation": "794:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17745,
                  "src": "786:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17742,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "786:7:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "770:30:87"
            },
            "src": "756:45:87"
          },
          {
            "id": 17747,
            "name": "PairNotSupported",
            "nameLocation": "813:16:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17746,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "829:2:87"
            },
            "src": "807:25:87"
          },
          {
            "id": 17749,
            "name": "InvalidTimeWindow",
            "nameLocation": "843:17:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17748,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "860:2:87"
            },
            "src": "837:26:87"
          },
          {
            "id": 17751,
            "name": "InvalidPrice",
            "nameLocation": "874:12:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "886:2:87"
            },
            "src": "868:21:87"
          },
          {
            "id": 17753,
            "name": "UniswapPoolAvailable",
            "nameLocation": "900:20:87",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 17752,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "920:2:87"
            },
            "src": "894:29:87"
          },
          {
            "body": {
              "id": 17759,
              "nodeType": "Block",
              "src": "950:40:87",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17755,
                      "name": "_onlyAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17773,
                      "src": "960:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 17756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "960:12:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17757,
                  "nodeType": "ExpressionStatement",
                  "src": "960:12:87"
                },
                {
                  "id": 17758,
                  "nodeType": "PlaceholderStatement",
                  "src": "982:1:87"
                }
              ]
            },
            "id": 17760,
            "name": "onlyAdmin",
            "nameLocation": "938:9:87",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 17754,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "947:2:87"
            },
            "src": "929:61:87",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 17772,
              "nodeType": "Block",
              "src": "1031:101:87",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 17765,
                            "name": "DEFAULT_ADMIN_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18344,
                            "src": "1057:18:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 17766,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5295,
                              "src": "1077:10:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 17767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1077:12:87",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17764,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18381,
                          "src": "1049:7:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 17768,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1049:41:87",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e64657220646f65736e277420686176652061646d696e20726f6c65",
                        "id": 17769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1092:32:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        },
                        "value": "sender doesn't have admin role"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        }
                      ],
                      "id": 17763,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1041:7:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1041:84:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17771,
                  "nodeType": "ExpressionStatement",
                  "src": "1041:84:87"
                }
              ]
            },
            "id": 17773,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyAdmin",
            "nameLocation": "1005:10:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17761,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1015:2:87"
            },
            "returnParameters": {
              "id": 17762,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1031:0:87"
            },
            "scope": 18079,
            "src": "996:136:87",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 17795,
              "nodeType": "Block",
              "src": "1200:127:87",
              "statements": [
                {
                  "expression": {
                    "id": 17783,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 17781,
                      "name": "UNISWAP_V3_FACTORY",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17713,
                      "src": "1210:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                        "typeString": "contract IUniswapV3Factory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 17782,
                      "name": "_uniswapFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17776,
                      "src": "1231:15:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                        "typeString": "contract IUniswapV3Factory"
                      }
                    },
                    "src": "1210:36:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                      "typeString": "contract IUniswapV3Factory"
                    }
                  },
                  "id": 17784,
                  "nodeType": "ExpressionStatement",
                  "src": "1210:36:87"
                },
                {
                  "expression": {
                    "id": 17787,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 17785,
                      "name": "WETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17715,
                      "src": "1256:4:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 17786,
                      "name": "_weth",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17778,
                      "src": "1263:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1256:12:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 17788,
                  "nodeType": "ExpressionStatement",
                  "src": "1256:12:87"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 17790,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "1289:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 17791,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1309:3:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1309:10:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17789,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18547,
                      "src": "1278:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 17793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1278:42:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17794,
                  "nodeType": "ExpressionStatement",
                  "src": "1278:42:87"
                }
              ]
            },
            "id": 17796,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17776,
                  "mutability": "mutable",
                  "name": "_uniswapFactory",
                  "nameLocation": "1168:15:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17796,
                  "src": "1150:33:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                    "typeString": "contract IUniswapV3Factory"
                  },
                  "typeName": {
                    "id": 17775,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 17774,
                      "name": "IUniswapV3Factory",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 7456,
                      "src": "1150:17:87"
                    },
                    "referencedDeclaration": 7456,
                    "src": "1150:17:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                      "typeString": "contract IUniswapV3Factory"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17778,
                  "mutability": "mutable",
                  "name": "_weth",
                  "nameLocation": "1193:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17796,
                  "src": "1185:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17777,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1185:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1149:50:87"
            },
            "returnParameters": {
              "id": 17780,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1200:0:87"
            },
            "scope": 18079,
            "src": "1138:189:87",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17993,
              "nodeType": "Block",
              "src": "1414:1510:87",
              "statements": [
                {
                  "assignments": [
                    17805
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17805,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "1436:4:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1424:16:87",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                        "typeString": "struct TwapOracle.Pool"
                      },
                      "typeName": {
                        "id": 17804,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 17803,
                          "name": "Pool",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 17729,
                          "src": "1424:4:87"
                        },
                        "referencedDeclaration": 17729,
                        "src": "1424:4:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_storage_ptr",
                          "typeString": "struct TwapOracle.Pool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17809,
                  "initialValue": {
                    "baseExpression": {
                      "id": 17806,
                      "name": "pools",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17720,
                      "src": "1443:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                        "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                      }
                    },
                    "id": 17808,
                    "indexExpression": {
                      "id": 17807,
                      "name": "quoteToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17798,
                      "src": "1449:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1443:17:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Pool_$17729_storage",
                      "typeString": "struct TwapOracle.Pool storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1424:36:87"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 17816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 17810,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17805,
                        "src": "1474:4:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                          "typeString": "struct TwapOracle.Pool memory"
                        }
                      },
                      "id": 17811,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "poolAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17726,
                      "src": "1474:16:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 17814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1502:1:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 17813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1494:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 17812,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1494:7:87",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 17815,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1494:10:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1474:30:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 17821,
                  "nodeType": "IfStatement",
                  "src": "1470:61:87",
                  "trueBody": {
                    "expression": {
                      "baseExpression": {
                        "id": 17817,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17724,
                        "src": "1513:6:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 17819,
                      "indexExpression": {
                        "id": 17818,
                        "name": "quoteToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17798,
                        "src": "1520:10:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1513:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 17802,
                    "id": 17820,
                    "nodeType": "Return",
                    "src": "1506:25:87"
                  }
                },
                {
                  "assignments": [
                    17823
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17823,
                      "mutability": "mutable",
                      "name": "secondsAgo",
                      "nameLocation": "1549:10:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1542:17:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17822,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1542:6:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17826,
                  "initialValue": {
                    "expression": {
                      "id": 17824,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17805,
                      "src": "1562:4:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                        "typeString": "struct TwapOracle.Pool memory"
                      }
                    },
                    "id": 17825,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "timeWindow",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17728,
                    "src": "1562:15:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1542:35:87"
                },
                {
                  "assignments": [
                    17831
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17831,
                      "mutability": "mutable",
                      "name": "secondsAgos",
                      "nameLocation": "1603:11:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1587:27:87",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                        "typeString": "uint32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17829,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1587:6:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17830,
                        "nodeType": "ArrayTypeName",
                        "src": "1587:8:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                          "typeString": "uint32[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17837,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "32",
                        "id": 17835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1630:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 17834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1617:12:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17832,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1621:6:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17833,
                        "nodeType": "ArrayTypeName",
                        "src": "1621:8:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                          "typeString": "uint32[]"
                        }
                      }
                    },
                    "id": 17836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1617:15:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                      "typeString": "uint32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1587:45:87"
                },
                {
                  "expression": {
                    "id": 17842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 17838,
                        "name": "secondsAgos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17831,
                        "src": "1642:11:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      "id": 17840,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 17839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1654:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1642:14:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 17841,
                      "name": "secondsAgo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17823,
                      "src": "1659:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "1642:27:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 17843,
                  "nodeType": "ExpressionStatement",
                  "src": "1642:27:87"
                },
                {
                  "expression": {
                    "id": 17848,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 17844,
                        "name": "secondsAgos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17831,
                        "src": "1679:11:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      "id": 17846,
                      "indexExpression": {
                        "hexValue": "31",
                        "id": 17845,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1691:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1679:14:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 17847,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1696:1:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1679:18:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 17849,
                  "nodeType": "ExpressionStatement",
                  "src": "1679:18:87"
                },
                {
                  "assignments": [
                    17854,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17854,
                      "mutability": "mutable",
                      "name": "tickCumulatives",
                      "nameLocation": "1724:15:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1709:30:87",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                        "typeString": "int56[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17852,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "1709:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "id": 17853,
                        "nodeType": "ArrayTypeName",
                        "src": "1709:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                          "typeString": "int56[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 17862,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 17860,
                        "name": "secondsAgos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17831,
                        "src": "1786:11:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 17856,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17805,
                              "src": "1760:4:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Pool_$17729_memory_ptr",
                                "typeString": "struct TwapOracle.Pool memory"
                              }
                            },
                            "id": 17857,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "poolAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17726,
                            "src": "1760:16:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17855,
                          "name": "IUniswapV3Pool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7478,
                          "src": "1745:14:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$7478_$",
                            "typeString": "type(contract IUniswapV3Pool)"
                          }
                        },
                        "id": 17858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1745:32:87",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$7478",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      "id": 17859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "observe",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7590,
                      "src": "1745:40:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                        "typeString": "function (uint32[] memory) view external returns (int56[] memory,uint160[] memory)"
                      }
                    },
                    "id": 17861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1745:53:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                      "typeString": "tuple(int56[] memory,uint160[] memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1708:90:87"
                },
                {
                  "assignments": [
                    17864
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17864,
                      "mutability": "mutable",
                      "name": "tickCumulativesDelta",
                      "nameLocation": "1814:20:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1808:26:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      },
                      "typeName": {
                        "id": 17863,
                        "name": "int56",
                        "nodeType": "ElementaryTypeName",
                        "src": "1808:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17872,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_int56",
                      "typeString": "int56"
                    },
                    "id": 17871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 17865,
                        "name": "tickCumulatives",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17854,
                        "src": "1837:15:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                          "typeString": "int56[] memory"
                        }
                      },
                      "id": 17867,
                      "indexExpression": {
                        "hexValue": "31",
                        "id": 17866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1853:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1837:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 17868,
                        "name": "tickCumulatives",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17854,
                        "src": "1858:15:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                          "typeString": "int56[] memory"
                        }
                      },
                      "id": 17870,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 17869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1874:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1858:18:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      }
                    },
                    "src": "1837:39:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int56",
                      "typeString": "int56"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1808:68:87"
                },
                {
                  "assignments": [
                    17874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17874,
                      "mutability": "mutable",
                      "name": "arithmeticMeanTick",
                      "nameLocation": "1892:18:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "1886:24:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 17873,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1886:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17887,
                  "initialValue": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "id": 17885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 17877,
                          "name": "tickCumulativesDelta",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17864,
                          "src": "1919:20:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 17882,
                                  "name": "secondsAgo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17823,
                                  "src": "1955:10:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "id": 17881,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1948:6:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint56_$",
                                  "typeString": "type(uint56)"
                                },
                                "typeName": {
                                  "id": 17880,
                                  "name": "uint56",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1948:6:87",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 17883,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1948:18:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint56",
                                "typeString": "uint56"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint56",
                                "typeString": "uint56"
                              }
                            ],
                            "id": 17879,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1942:5:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int56_$",
                              "typeString": "type(int56)"
                            },
                            "typeName": {
                              "id": 17878,
                              "name": "int56",
                              "nodeType": "ElementaryTypeName",
                              "src": "1942:5:87",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 17884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1942:25:87",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "src": "1919:48:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      ],
                      "id": 17876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1913:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int24_$",
                        "typeString": "type(int24)"
                      },
                      "typeName": {
                        "id": 17875,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1913:5:87",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 17886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1913:55:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1886:82:87"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 17903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      },
                      "id": 17890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 17888,
                        "name": "tickCumulativesDelta",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17864,
                        "src": "2027:20:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 17889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2050:1:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2027:24:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          },
                          "id": 17901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "id": 17899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 17891,
                              "name": "tickCumulativesDelta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17864,
                              "src": "2056:20:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "%",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 17896,
                                      "name": "secondsAgo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17823,
                                      "src": "2092:10:87",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    ],
                                    "id": 17895,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2085:6:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint56_$",
                                      "typeString": "type(uint56)"
                                    },
                                    "typeName": {
                                      "id": 17894,
                                      "name": "uint56",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2085:6:87",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 17897,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2085:18:87",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint56",
                                    "typeString": "uint56"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint56",
                                    "typeString": "uint56"
                                  }
                                ],
                                "id": 17893,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2079:5:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int56_$",
                                  "typeString": "type(int56)"
                                },
                                "typeName": {
                                  "id": 17892,
                                  "name": "int56",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2079:5:87",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 17898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2079:25:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "src": "2056:48:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 17900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2108:1:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2056:53:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 17902,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2055:55:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2027:83:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 17907,
                  "nodeType": "IfStatement",
                  "src": "2023:109:87",
                  "trueBody": {
                    "expression": {
                      "id": 17905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "2112:20:87",
                      "subExpression": {
                        "id": 17904,
                        "name": "arithmeticMeanTick",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17874,
                        "src": "2112:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "id": 17906,
                    "nodeType": "ExpressionStatement",
                    "src": "2112:20:87"
                  }
                },
                {
                  "assignments": [
                    17909
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17909,
                      "mutability": "mutable",
                      "name": "sqrtRatioX96",
                      "nameLocation": "2159:12:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 17993,
                      "src": "2151:20:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 17908,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "2151:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 17914,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 17912,
                        "name": "arithmeticMeanTick",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17874,
                        "src": "2202:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      ],
                      "expression": {
                        "id": 17910,
                        "name": "TickMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19704,
                        "src": "2174:8:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TickMath_$19704_$",
                          "typeString": "type(library TickMath)"
                        }
                      },
                      "id": 17911,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getSqrtRatioAtTick",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19561,
                      "src": "2174:27:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                        "typeString": "function (int24) pure returns (uint160)"
                      }
                    },
                    "id": 17913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2174:47:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2151:70:87"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 17921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 17915,
                      "name": "sqrtRatioX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17909,
                      "src": "2340:12:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 17918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2361:7:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            },
                            "typeName": {
                              "id": 17917,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "2361:7:87",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            }
                          ],
                          "id": 17916,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967269,
                          "src": "2356:4:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 17919,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2356:13:87",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint128",
                          "typeString": "type(uint128)"
                        }
                      },
                      "id": 17920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "2356:17:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "2340:33:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17989,
                    "nodeType": "Block",
                    "src": "2628:263:87",
                    "statements": [
                      {
                        "assignments": [
                          17956
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17956,
                            "mutability": "mutable",
                            "name": "ratioX128",
                            "nameLocation": "2650:9:87",
                            "nodeType": "VariableDeclaration",
                            "scope": 17989,
                            "src": "2642:17:87",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17955,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2642:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 17965,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 17959,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17909,
                              "src": "2678:12:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 17960,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17909,
                              "src": "2692:12:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                "typeString": "int_const 18446744073709551616"
                              },
                              "id": 17963,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "31",
                                "id": 17961,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2706:1:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "hexValue": "3634",
                                "id": 17962,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2711:2:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_64_by_1",
                                  "typeString": "int_const 64"
                                },
                                "value": "64"
                              },
                              "src": "2706:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                "typeString": "int_const 18446744073709551616"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                "typeString": "int_const 18446744073709551616"
                              }
                            ],
                            "expression": {
                              "id": 17957,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19002,
                              "src": "2662:8:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 17958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18957,
                            "src": "2662:15:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 17964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2662:52:87",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2642:72:87"
                      },
                      {
                        "expression": {
                          "id": 17987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 17966,
                            "name": "quotePrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17801,
                            "src": "2728:10:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 17969,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 17967,
                                "name": "quoteToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17798,
                                "src": "2741:10:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 17968,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17715,
                                "src": "2754:4:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2741:17:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "id": 17982,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17980,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2854:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313238",
                                    "id": 17981,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2859:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  "src": "2854:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17983,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2864:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "id": 17984,
                                  "name": "ratioX128",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17956,
                                  "src": "2870:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 17978,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2838:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2838:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2838:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "2741:139:87",
                            "trueExpression": {
                              "arguments": [
                                {
                                  "id": 17972,
                                  "name": "ratioX128",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17956,
                                  "src": "2793:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17973,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2804:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "id": 17976,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17974,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2810:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313238",
                                    "id": 17975,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2815:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  "src": "2810:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  }
                                ],
                                "expression": {
                                  "id": 17970,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2777:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2777:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17977,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2777:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2728:152:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17988,
                        "nodeType": "ExpressionStatement",
                        "src": "2728:152:87"
                      }
                    ]
                  },
                  "id": 17990,
                  "nodeType": "IfStatement",
                  "src": "2336:555:87",
                  "trueBody": {
                    "id": 17954,
                    "nodeType": "Block",
                    "src": "2375:247:87",
                    "statements": [
                      {
                        "assignments": [
                          17923
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17923,
                            "mutability": "mutable",
                            "name": "ratioX192",
                            "nameLocation": "2397:9:87",
                            "nodeType": "VariableDeclaration",
                            "scope": 17954,
                            "src": "2389:17:87",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17922,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2389:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 17930,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 17926,
                                "name": "sqrtRatioX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17909,
                                "src": "2417:12:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 17925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2409:7:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 17924,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2409:7:87",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 17927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2409:21:87",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 17928,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17909,
                            "src": "2433:12:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2409:36:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2389:56:87"
                      },
                      {
                        "expression": {
                          "id": 17952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 17931,
                            "name": "quotePrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17801,
                            "src": "2459:10:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 17934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 17932,
                                "name": "quoteToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17798,
                                "src": "2472:10:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 17933,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17715,
                                "src": "2485:4:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2472:17:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  },
                                  "id": 17947,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17945,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2585:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313932",
                                    "id": 17946,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2590:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  "src": "2585:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17948,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2595:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "id": 17949,
                                  "name": "ratioX192",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17923,
                                  "src": "2601:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 17943,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2569:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17944,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2569:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2569:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17951,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "2472:139:87",
                            "trueExpression": {
                              "arguments": [
                                {
                                  "id": 17937,
                                  "name": "ratioX192",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17923,
                                  "src": "2524:9:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "31653138",
                                  "id": 17938,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2535:4:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  "value": "1e18"
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  },
                                  "id": 17941,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 17939,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2541:1:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313932",
                                    "id": 17940,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2546:3:87",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  "src": "2541:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                    "typeString": "int_const 1000000000000000000"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                    "typeString": "int_const 6277...(50 digits omitted)...2896"
                                  }
                                ],
                                "expression": {
                                  "id": 17935,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19002,
                                  "src": "2508:8:87",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$19002_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 17936,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18957,
                                "src": "2508:15:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 17942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2508:42:87",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2459:152:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17953,
                        "nodeType": "ExpressionStatement",
                        "src": "2459:152:87"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 17991,
                    "name": "quotePrice",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17801,
                    "src": "2907:10:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17802,
                  "id": 17992,
                  "nodeType": "Return",
                  "src": "2900:17:87"
                }
              ]
            },
            "functionSelector": "41976e09",
            "id": 17994,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPrice",
            "nameLocation": "1342:8:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17798,
                  "mutability": "mutable",
                  "name": "quoteToken",
                  "nameLocation": "1359:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17994,
                  "src": "1351:18:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17797,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1351:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1350:20:87"
            },
            "returnParameters": {
              "id": 17802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17801,
                  "mutability": "mutable",
                  "name": "quotePrice",
                  "nameLocation": "1402:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 17994,
                  "src": "1394:18:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17800,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1394:7:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1393:20:87"
            },
            "scope": 18079,
            "src": "1333:1591:87",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18051,
              "nodeType": "Block",
              "src": "3016:350:87",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 18007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 18005,
                      "name": "timeWindow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18000,
                      "src": "3030:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 18006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3044:1:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3030:15:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18011,
                  "nodeType": "IfStatement",
                  "src": "3026:47:87",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 18008,
                        "name": "InvalidTimeWindow",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17749,
                        "src": "3054:17:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 18009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3054:19:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18010,
                    "nodeType": "RevertStatement",
                    "src": "3047:26:87"
                  }
                },
                {
                  "assignments": [
                    18013
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18013,
                      "mutability": "mutable",
                      "name": "_pool",
                      "nameLocation": "3091:5:87",
                      "nodeType": "VariableDeclaration",
                      "scope": 18051,
                      "src": "3083:13:87",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18012,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3083:7:87",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 18020,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 18016,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17715,
                        "src": "3126:4:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18017,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17996,
                        "src": "3132:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18018,
                        "name": "feeTier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17998,
                        "src": "3139:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      ],
                      "expression": {
                        "id": 18014,
                        "name": "UNISWAP_V3_FACTORY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17713,
                        "src": "3099:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Factory_$7456",
                          "typeString": "contract IUniswapV3Factory"
                        }
                      },
                      "id": 18015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getPool",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7429,
                      "src": "3099:26:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint24_$returns$_t_address_$",
                        "typeString": "function (address,address,uint24) view external returns (address)"
                      }
                    },
                    "id": 18019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3099:48:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3083:64:87"
                },
                {
                  "condition": {
                    "id": 18025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3161:26:87",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 18023,
                          "name": "_pool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18013,
                          "src": "3181:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 18021,
                          "name": "Address",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5283,
                          "src": "3162:7:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Address_$5283_$",
                            "typeString": "type(library Address)"
                          }
                        },
                        "id": 18022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isContract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5006,
                        "src": "3162:18:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 18024,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3162:25:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18029,
                  "nodeType": "IfStatement",
                  "src": "3157:57:87",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 18026,
                        "name": "PairNotSupported",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17747,
                        "src": "3196:16:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 18027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3196:18:87",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18028,
                    "nodeType": "RevertStatement",
                    "src": "3189:25:87"
                  }
                },
                {
                  "expression": {
                    "id": 18035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 18030,
                          "name": "pools",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17720,
                          "src": "3224:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                            "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                          }
                        },
                        "id": 18032,
                        "indexExpression": {
                          "id": 18031,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17996,
                          "src": "3230:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3224:12:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_storage",
                          "typeString": "struct TwapOracle.Pool storage ref"
                        }
                      },
                      "id": 18033,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "poolAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17726,
                      "src": "3224:24:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18034,
                      "name": "_pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18013,
                      "src": "3251:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3224:32:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 18036,
                  "nodeType": "ExpressionStatement",
                  "src": "3224:32:87"
                },
                {
                  "expression": {
                    "id": 18042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 18037,
                          "name": "pools",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17720,
                          "src": "3266:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                            "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                          }
                        },
                        "id": 18039,
                        "indexExpression": {
                          "id": 18038,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17996,
                          "src": "3272:5:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3266:12:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Pool_$17729_storage",
                          "typeString": "struct TwapOracle.Pool storage ref"
                        }
                      },
                      "id": 18040,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "timeWindow",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17728,
                      "src": "3266:23:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18041,
                      "name": "timeWindow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18000,
                      "src": "3292:10:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "3266:36:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 18043,
                  "nodeType": "ExpressionStatement",
                  "src": "3266:36:87"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 18045,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17996,
                        "src": "3325:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18046,
                        "name": "feeTier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17998,
                        "src": "3332:7:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      {
                        "id": 18047,
                        "name": "timeWindow",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18000,
                        "src": "3341:10:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 18048,
                        "name": "_pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18013,
                        "src": "3353:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18044,
                      "name": "PoolSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17739,
                      "src": "3317:7:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint24_$_t_uint32_$_t_address_$returns$__$",
                        "typeString": "function (address,uint24,uint32,address)"
                      }
                    },
                    "id": 18049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3317:42:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18050,
                  "nodeType": "EmitStatement",
                  "src": "3312:47:87"
                }
              ]
            },
            "functionSelector": "20f383db",
            "id": 18052,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 18003,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 18002,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17760,
                  "src": "3006:9:87"
                },
                "nodeType": "ModifierInvocation",
                "src": "3006:9:87"
              }
            ],
            "name": "setPool",
            "nameLocation": "2939:7:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17996,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "2955:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18052,
                  "src": "2947:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17995,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2947:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17998,
                  "mutability": "mutable",
                  "name": "feeTier",
                  "nameLocation": "2969:7:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18052,
                  "src": "2962:14:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 17997,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2962:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18000,
                  "mutability": "mutable",
                  "name": "timeWindow",
                  "nameLocation": "2985:10:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18052,
                  "src": "2978:17:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 17999,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2978:6:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2946:50:87"
            },
            "returnParameters": {
              "id": 18004,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3016:0:87"
            },
            "scope": 18079,
            "src": "2930:436:87",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18077,
              "nodeType": "Block",
              "src": "3439:104:87",
              "statements": [
                {
                  "expression": {
                    "id": 18065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 18061,
                        "name": "prices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17724,
                        "src": "3449:6:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 18063,
                      "indexExpression": {
                        "id": 18062,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18054,
                        "src": "3456:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3449:13:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 18064,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18056,
                      "src": "3465:5:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3449:21:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18066,
                  "nodeType": "ExpressionStatement",
                  "src": "3449:21:87"
                },
                {
                  "expression": {
                    "id": 18070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "3480:19:87",
                    "subExpression": {
                      "baseExpression": {
                        "id": 18067,
                        "name": "pools",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17720,
                        "src": "3487:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Pool_$17729_storage_$",
                          "typeString": "mapping(address => struct TwapOracle.Pool storage ref)"
                        }
                      },
                      "id": 18069,
                      "indexExpression": {
                        "id": 18068,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18054,
                        "src": "3493:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3487:12:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Pool_$17729_storage",
                        "typeString": "struct TwapOracle.Pool storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18071,
                  "nodeType": "ExpressionStatement",
                  "src": "3480:19:87"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 18073,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18054,
                        "src": "3523:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 18074,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18056,
                        "src": "3530:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18072,
                      "name": "PriceSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17745,
                      "src": "3514:8:87",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 18075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3514:22:87",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18076,
                  "nodeType": "EmitStatement",
                  "src": "3509:27:87"
                }
              ]
            },
            "functionSelector": "00e4768b",
            "id": 18078,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 18059,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 18058,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17760,
                  "src": "3429:9:87"
                },
                "nodeType": "ModifierInvocation",
                "src": "3429:9:87"
              }
            ],
            "name": "setPrice",
            "nameLocation": "3381:8:87",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18054,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "3398:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18078,
                  "src": "3390:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18053,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3390:7:87",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18056,
                  "mutability": "mutable",
                  "name": "price",
                  "nameLocation": "3413:5:87",
                  "nodeType": "VariableDeclaration",
                  "scope": 18078,
                  "src": "3405:13:87",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18055,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3405:7:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3389:30:87"
            },
            "returnParameters": {
              "id": 18060,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3439:0:87"
            },
            "scope": 18079,
            "src": "3372:171:87",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 18080,
        "src": "363:3182:87",
        "usedErrors": [
          17747,
          17749,
          17751,
          17753,
          19163
        ]
      }
    ],
    "src": "81:3465:87"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.6",
  "updatedAt": "2024-09-24T09:31:11.953Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getRoleAdmin(bytes32)": {
        "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
      },
      "getRoleMember(bytes32,uint256)": {
        "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information."
      },
      "getRoleMemberCount(bytes32)": {
        "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role."
      },
      "getRoleMemberIndex(bytes32,address)": {
        "details": "Returns the index of the account that have `role`."
      },
      "grantRole(bytes32,address)": {
        "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."
      },
      "hasRole(bytes32,address)": {
        "details": "Returns `true` if `account` has been granted `role`."
      },
      "renounceRole(bytes32,address)": {
        "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."
      },
      "revokeRole(bytes32,address)": {
        "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}